Регистрация | Войти
Lisp — программируемый язык программирования
RSS
Распознавание кодировки файлов из POST запроса.
irmpow - 04.05.2014 04:32, Сообщений - 3
Столкнулся с проблемой распознавания имени файла при его загрузке.
В шаблоне:
<form method="post" enctype="multipart/form-data">
    <input name="text" type="text" />
    <input name="uplimg" type="file" value="Загрузить"></input>
    <input type="submit" value="Запостить" />
</form>

обработчик ПОСТ запроса для теста:
(restas:define-route uploadimage/post ("/upload/image.html" :method :post)
  (:requirement #'admin-user-p)
  (let ((img (form-field-value "uplimg"))
    (txt (form-field-value "text")))
    (local-ssh-cmd  (format nil "cp ~A /home/irmpow/~A"
        (nth 0 img);путь до временно созданного файла
        (nth 1 img);имя загруженного файла
        ))
    (format nil "~A" (third img))
    (format nil "file:~A text:~A" (first img) txt);просто тест возможностей multipart
       ))

local-ssh-cmd - просто выполняет полученную в виде строки команду в консоли.
если имя файла на английском - все идеально. В home создается нужный файл с нужным расширением. Простое и удобное решение. Проблема в том, что браузер передает файл как есть, в т.ч. и имя. Если оно русское - то приходят кракозябры как тут:
http://www.html.by/threads/18004-Kodirovka-imeni-fajla-pri-aplode

Есть конечно возможность по типу файла (third img) и прочим тестовым полям (фамилия имя и т.п.) придумывать русские имена файлов, но это не так элегантно. Сталкивались с подобным? Не подскажите как решали?
[#]
Так по вашей же ссылке и решение есть.
Кодируйте то что пришло в UTF-8, например.
dmitrys99 - 08.05.2014 10:41
[#] Ответ на комментарий от dmitrys99 08.05.2014 10:41
Вот только как это сделать в рамках лиспа или вызова bash не подскажите? Ведь это, в общем случае, может быть и текстовый файл и картинка.
irmpow - 09.05.2014 23:40
[#] Ответ на комментарий от irmpow 09.05.2014 23:40
Например так (SBCL):

(sb-ext:octets-to-string  
  (sb-ext:string-to-octets
    (nth 1 img)
   :external-format :latin-1
)

 :external-format :utf-8
)

Коллеги может еще какой способ подскажут, но это как минимум работает и не требует BABEL.
dmitrys99 - 10.05.2014 07:40
@2009-2013 lisper.ru