使用client_body_in_file_only上传nginx文件

时间:2016-04-05 14:36:38

标签: nginx file-upload

晚上好, 我需要将静态内容上传到nginx服务器1.9(因此上传模块不能使用此版本)。我已经阅读了文章"Nginx direct file upload without passing them through backend"并按照说明一步一步地进行了操作。一切都适合我,除了nginx数据目录中的文件名。文件名看起来像&00; 0000000001',' 0061565403'等等。 如何使用正确的名称保存文件? 这是我的nginx位置配置:

location /upload {
limit_except POST              { deny all; }
client_body_temp_path          /data/;
client_body_in_file_only       on;
client_body_buffer_size        128K;
client_max_body_size           50M;
proxy_pass_request_headers     on;
proxy_set_header content-type "text/html";
proxy_set_body                 $request_body_file;
proxy_pass                     http://localhost:8080/
proxy_redirect                 off;}

2 个答案:

答案 0 :(得分:2)

您可以在客户端使用HTTP标头传递正确的名称(无论是什么),例如:

Correct-Filename: my-correct-filename

由于您正在使用proxy_pass_request_headers on,因此在后端可以看到标题,您可以在保存文件时使用它。但是,使用标题时,文件名仅限于使用ASCII字符,请参阅this answer

答案 1 :(得分:0)

我能够执行此操作的唯一方法是将原始文件名作为参数发送(我使用JS将文件名复制到隐藏字段),然后在服务器上(如果我正在存储临时文件)到我们的文件系统,我使用该参数在将文件保存到其“适当”位置的过程中重命名该文件。

不漂亮,但是可以。