我正在尝试配置 nginx 来管理 node.js 应用程序的文件上传。 我已经遵循了这个教程:https://coderwall.com/p/swgfvw/nginx-direct-file-upload-without-passing-them-through-backend
我使用以下配置完成了它:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /upload {
auth_request /upload/authenticate;
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 1000M;
proxy_pass_request_headers on;
proxy_set_header X-FILE $request_body_file;
proxy_set_body off;
proxy_redirect off;
proxy_pass http://localhost:3000/uploads;
}
location /upload/authenticate {
internal;
proxy_set_body off;
proxy_pass http://localhost:3000/auth/isAuthenticated;
}
}
我用Postman做了如下测试:
帖子请求:
POST/上传 HTTP/1.1 主机:本地主机 缓存控制:无缓存
----WebKitFormBoundaryE19zNvXGzXaLvS5C 内容处置:表单数据;名称=“图像”;文件名=“pic.jpg” 内容类型:图像/jpeg
----WebKitFormBoundaryE19zNvXGzXaLvS5C
它工作正常,nginx 将图像上传到/tmp 目录中。 问题是该文件被重命名为“0000000001”,当我手动将其重命名为“pic.jpg”并尝试打开它时,查看器提示“解释 JPEG 图像文件时出错(不是 JPEG 文件:以 0x2d 0x2d 开头)”。
当我运行文件命令(文件 pic.jpg)时,它返回:“pic.jpg:数据”。
最佳答案
你能检查一下Postman版本吗? 在我的环境中,Postman(v3.2.8)在请求方法上有“二进制”单选按钮。
根据博文,“clientbodyinfileonly”方法不兼容多部分数据,仅支持二进制数据上传。
因此请使用二进制模式重试请求(Postman 或其他方法,例如 XHR2)。
关于node.js - 使用 nginx 和 node.js 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34557544/