我使用Multer在我的JavaScript应用程序上进行文件上传,所有上传都在查找,直到我使用nginx作为反向代理部署应用程序。我似乎无法找出问题所在。我还使用Vimeo库进行Vimeo上传,这也已经停止。
下面的一切在我的本地系统上仍然可以完美地工作,并且在我开始使用NGINX上的域而不是NodeJS IP之前一直可以完美地在线工作:PORT
我也安装了让加密SSL在同一过程中,我不知道如果这将导致麻烦在这里。
下面是我的代码上传图像到文件夹和视频到Vimeo服务器使用Vimeo API.
var multer = require('multer')
var upload = multer({ dest:'public/uploads/' })
var Vimeo = require('vimeo').Vimeo;
var lib = new Vimeo('somekey', 'someuser', 'somepass');
/* HANDLE IMAGE POST */
router.post('/profile', upload.single('picture'), function(req, res) {
if(req.file){
req.body.picture = req.file.filename;
}
});
/* HANDLE VIDEO POST */
router.post('/video-vimeo', upload.single('vimeovideo'), function(req, res) {
if(req.file){
req.body.videourl = req.file.filename;
}
var vimeoUrl ='/public/uploads/'+req.file.filename;
lib.streamingUpload(vimeoUrl, function (error, body, status_code, headers) {
if (error) { throw error; }
lib.request(headers.location, function (error, body, status_code, headers) {
var video = {};
video._id = req.body._id;
video.videourl = body.link;
videoModel.findByIdAndUpdate(video._id, video, function(err, dish) {
if (err) { console.log(err); }
else{ res.redirect(req.get('referer')); }
});
});
});
});
字符串
我的nginx设置(/etc/nginx/sites-enabled):
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:8080;
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;
}
}
型
NodeJS Server in Express(bin/www):
var app = require('../app');
var debug = require('debug')('example:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '8080');
app.set('port', port);
var server = http.createServer(app);
server.listen(port, 'localhost');
server.on('error', onError);
server.on('listening', onListening);
型
我发现一些文章建议在我的NGINX配置中添加以下内容(它对我不起作用):
location /public/uploads {
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:8080/public/uploads;
}
型
请告诉我这是不是一个常见的问题?我做错了什么?
2条答案
按热度按时间plupiseo1#
我最近遇到了这个问题,花了几天时间试图弄清楚。
在生产模式下,uploads文件夹与在开发模式下或在本地主机上的位置不同。
尝试在开发和生产中运行一些控制台日志,以找出您的uploads文件夹的位置。
这是我的代码multer.diskstorage
字符串
j8ag8udp2#
但问题是什么。对我来说,文件.originalname是不完整的,我只得到了扩展名,它在开发模式下工作正常。只有在生产中遇到这个问题,使用nginx作为反向代理,让SSL加密。