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

Кроме того, ваш код позволяет людям читать произвольные файлы с диска. Это в конечном итоге приведет к атаке на сервер.

Другие вопросы по тегам