Nginx文件上传,文件到哪里去了?

Nginx文件上传,文件到哪里去了?

我正在尝试配置 nginx 以支持文件上传。我正在使用描述的方法这里。我的nginx.conf样子是:

    location /upload {
        limit_except POST              { deny all; } 

        client_body_temp_path          /tmp;
        client_body_in_file_only       on;
        client_body_buffer_size        128K;
        client_max_body_size           20G;

        return 201 $request_body_file;
    } 

这里的想法是,通过打开client_body_in_file_only,每个请求都会直接保存到磁盘。同时,保存的文件名也会返回给客户端。

我可以使用 cURL 上传文件并看到它们被完整地传输:

$ curl -i -F "[email protected]" http://server/upload > out.txt   
  % Total    % Received % Xferd Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
 100 3053k    0     0  100 3053k      0  7874k --:--:-- --:--:-- --:--:-- 7889k

该文件大小为 3 MB,确实传输了 3 MB。响应为:

$ cat out.txt 
HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Server: nginx/1.13.4
Date: Tue, 22 Aug 2017 04:21:48 GMT
Content-Type: text/plain
Content-Length: 0
Connection: keep-alive

请注意,我在响应主体中没有收到文件名。那么服务器上的 下什么都没有/tmp/。上传的文件去哪儿了?

答案1

我能够使用ngx_echo模块。关键是echo_read_request_body指令,顾名思义,明确读取请求主体。

删除该行

return 201 $request_body_file;

并将其替换为

echo_read_request_body;
echo $request_body_file;

成功了!

相关内容