История изменений
Исправление MariaRTI, (текущая версия) :
Почитал тут другие посты. Было предположение, что ошибка CORS может возникать, когда сервер не отвечает на OPTIONS. Однако, я специально разделил в обработчике на сервере запросы POST и все остальные.
[code=Erlang] init(Req, Opts) -> case cowboy_req:method(Req) of ««POST»» -> {ok, Req1, Opts1} = options(Req, Opts), {ok, Headers, Req2} = cowboy_req:read_part(Req1), {ok, Data, Req3} = cowboy_req:read_part_body(Req2), {file, ««upfile»», Filename, ContentType} = cow_multipart:form_data(Headers), io:format(«Received file ~p of content-type ~p as follow:~n~p~n~n», [Filename, ContentType, Data]), Filepath = filename:join([code:priv_dir(«upserver»), «upload», Filename]), file:write_file(Filepath, Data), {ok, Req3, Opts1}; _ -> io:format(«Method=~p~n»,[cowboy_req:method(Req)]), options(Req, Opts) end. [/code]
Если бы запрос OPTIONS выполнялся, то вывелось бы сообщение в лог «Method=OPTIONS», а после него вывелся бы лог для POST. Однако такого не наблюдается, отрабатывает только POST.
Запрос OPTIONS, приходил, когда я использовал следующую строчку в клиентском запросе. Сейчас она закоментирована, смотри в первом сообщении
[code=JavaScript] xhr.setRequestHeader(«Access-Control-Allow-Origin»,«https://upserver:8888»); [/code]
Но в этом случае файл не отправлялся, без каких либо ошибок и сообщений, запрос POST не приходил на сервер, как будто данная строчка аннулировала предыдущие настройки запроса.
Исправление MariaRTI, :
Почитал тут другие посты. Было предположение, что ошибка CORS может возникать, когда сервер не отвечает на OPTIONS. Однако, я специально разделил в обработчике на сервере запросы POST и все остальные.
[code=Erlang] init(Req, Opts) -> case cowboy_req:method(Req) of ««POST»» -> {ok, Req1, Opts1} = options(Req, Opts), {ok, Headers, Req2} = cowboy_req:read_part(Req1), {ok, Data, Req3} = cowboy_req:read_part_body(Req2), {file, ««upfile»», Filename, ContentType} = cow_multipart:form_data(Headers), io:format(«Received file ~p of content-type ~p as follow:~n~p~n~n», [Filename, ContentType, Data]), Filepath = filename:join([code:priv_dir(«upserver»), «upload», Filename]), file:write_file(Filepath, Data), {ok, Req3, Opts1}; _ -> io:format(«Method=~p~n»,[cowboy_req:method(Req)]), options(Req, Opts) end. [/code]
Если бы запрос OPTIONS выполнялся, то вывелось бы сообщение в лог «Method=OPTIONS», а после него вывелся бы лог для POST. Однако такого не наблюдается, отрабатывает только POST.
Запрос OPTIONS, приходил, когда я использовал следующую строчку в клиентском запросе. Сейчас она закоментирована, смотри в первом сообщении
[code=JavaScript] xhr.setRequestHeader(«Access-Control-Allow-Origin»,«https://yyy:8888»); [/code]
Но в этом случае файл не отправлялся, без каких либо ошибок и сообщений, запрос POST не приходил на сервер, как будто данная строчка аннулировала предыдущие настройки запроса.
Исправление MariaRTI, :
Почитал тут другие посты. Было предположение, что ошибка CORS может возникать, когда сервер не отвечает на OPTIONS. Однако, я специально разделил в обработчике на сервере запросы POST и все остальные.
[code] init(Req, Opts) -> case cowboy_req:method(Req) of ««POST»» -> {ok, Req1, Opts1} = options(Req, Opts), {ok, Headers, Req2} = cowboy_req:read_part(Req1), {ok, Data, Req3} = cowboy_req:read_part_body(Req2), {file, ««upfile»», Filename, ContentType} = cow_multipart:form_data(Headers), io:format(«Received file ~p of content-type ~p as follow:~n~p~n~n», [Filename, ContentType, Data]), Filepath = filename:join([code:priv_dir(«upserver»), «upload», Filename]), file:write_file(Filepath, Data), {ok, Req3, Opts1}; _ -> io:format(«Method=~p~n»,[cowboy_req:method(Req)]), options(Req, Opts) end. [/code]
Если бы запрос OPTIONS выполнялся, то вывелось бы сообщение в лог «Method=OPTIONS», а после него вывелся бы лог для POST. Однако такого не наблюдается, отрабатывает только POST.
Запрос OPTIONS, приходил, когда я использовал следующую строчку в клиентском запросе. Сейчас она закоментирована, смотри в первом сообщении
[code] xhr.setRequestHeader(«Access-Control-Allow-Origin»,«https://yyy:8888»); [/code]
Но в этом случае файл не отправлялся, без каких либо ошибок и сообщений, запрос POST не приходил на сервер, как будто данная строчка аннулировала предыдущие настройки запроса.
Исправление MariaRTI, :
Почитал тут другие посты. Было предположение, что ошибка CORS может возникать, когда сервер не отвечает на OPTIONS. Однако, я специально разделил в обработчике на сервере запросы POST и все остальные.
[code] init(Req, Opts) -> case cowboy_req:method(Req) of ««POST»» -> {ok, Req1, Opts1} = options(Req, Opts), {ok, Headers, Req2} = cowboy_req:read_part(Req1), {ok, Data, Req3} = cowboy_req:read_part_body(Req2), {file, ««upfile»», Filename, ContentType} = cow_multipart:form_data(Headers), io:format(«Received file ~p of content-type ~p as follow:~n~p~n~n», [Filename, ContentType, Data]), Filepath = filename:join([code:priv_dir(«upserver»), «upload», Filename]), file:write_file(Filepath, Data), {ok, Req3, Opts1}; _ -> io:format(«Method=~p~n»,[cowboy_req:method(Req)]), options(Req, Opts) end. [/code] Если бы запрос OPTIONS выполнялся, то вывелось бы сообщение в лог «Method=OPTIONS», а после него вывелся бы лог для POST. Однако такого не наблюдается, отрабатывает только POST.
Запрос OPTIONS, приходил, когда я использовал следующую строчку в клиентском запросе. Сейчас она закоментирована, смотри в первом сообщении
[code] xhr.setRequestHeader(«Access-Control-Allow-Origin»,«https://yyy:8888»); [/code]
Но в этом случае файл не отправлялся, без каких либо ошибок и сообщений, запрос POST не приходил на сервер, как будто данная строчка аннулировала предыдущие настройки запроса.
Исходная версия MariaRTI, :
Почитал тут другие посты. Было предположение, что ошибка CORS может возникать, когда сервер не отвечает на OPTIONS. Однако, я специально разделил в обработчике на сервере запросы POST и все остальные, [code] init(Req, Opts) -> case cowboy_req:method(Req) of ««POST»» -> {ok, Req1, Opts1} = options(Req, Opts), {ok, Headers, Req2} = cowboy_req:read_part(Req1), {ok, Data, Req3} = cowboy_req:read_part_body(Req2), {file, ««upfile»», Filename, ContentType} = cow_multipart:form_data(Headers), io:format(«Received file ~p of content-type ~p as follow:~n~p~n~n», [Filename, ContentType, Data]), Filepath = filename:join([code:priv_dir(«upserver»), «upload», Filename]), file:write_file(Filepath, Data), {ok, Req3, Opts1}; _ -> io:format(«Method=~p~n»,[cowboy_req:method(Req)]), options(Req, Opts) end. [/code] Если бы запрос OPTIONS выполнялся, то вывелось бы сообщение в лог «Method=OPTIONS», а после него вывелся бы лог для POST. Однако такого не наблюдается, отрабатывает только POST.
Запрос OPTIONS, приходил, когда я использовал следующую строчку в клиентском запросе. Сейчас она закоментирована, смотри в первом сообщении [code] xhr.setRequestHeader(«Access-Control-Allow-Origin»,«https://yyy:8888»); [/code] Но в этом случае файл не отправлялся, без каких либо ошибок и сообщений, запрос POST не приходил на сервер, как будто данная строчка аннулировала предыдущие настройки запроса.