Erlang файл из пост-парам
У меня проблема: мне нужно прочитать файл из post param в ChicagoBoss. Я пытаюсь:
upload_file('POST', []) ->
File = Req:post_param("file"),
{ok,Data} = file:read_file(File),
И есть ошибка:
{{badmatch,{error,enoent}}
Когда я пытаюсь проверить файл как:
case filelib:is_file(File) of
true -> {output, "ok"};
false -> {output, "error"}
end.
я имею error
выход. Я пытаюсь загрузить файл с почтальоном. В чем проблема?
2 ответа
Что внутри Req:post_param("file")
?
Вы предполагаете, что это путь к файлу: вы проверили значение File
?
Во всяком случае, это Req:post_files/0
вы, вероятно, ищете:
[{_, _FileName, TempLocation, _Size}|_] = Req:post_files(),
{ok,Data} = file:read_file(TempLocation),
Также, вероятно, плохая идея оставить файл в его временном местоположении, вам лучше найти более подходящее место для его хранения.
enoent
является кодом ошибки posix для "каталог не найден".
http://www.erlang.org/doc/man/file.html
Кроме того, ваш код позволяет людям читать произвольные файлы с диска. Это в конечном итоге приведет к атаке на сервер.