无法在Heroku服务器上上传图像

有上传图像到Heroku服务器上的一些问题,本地主机上的一切工作很好。 但是,当我上传图片时,看起来一切顺利,但刷新页面后,我得到了一个错误信息404(未find),所以它似乎没有上传。

这是我的代码

var express = require('express'), app = express(), server = app.listen(process.env.PORT || 5000), fs = require('fs-extra'), im = require('imagemagick'), util = require('util'), formidable = require('formidable'); app.post('/upload', function (req, res){ var form = new formidable.IncomingForm(); // show respond form.parse(req, function(err, fields, files) { res.writeHead(200, {'content-type': 'text/plain'}); res.write('received upload:\n\n'); console.log(fields + ' ' + files); res.end(util.inspect({fields: fields, files: files})); }); form.on('end', function(fields, files) { var that = this; // temporary storage of image var temp_path = that.openedFiles[0].path; // uploaded image name var file_name = that.openedFiles[0].name; var dirpath = __dirname + '/app'; var opt = { thumb : { width: 150, height: 150, dest: '/uploads/thumbnails/' }, original : { dest : '/uploads/original/' } }; // get extension of image var extension; (function(type) { if (type == 'image/jpeg' || type == 'image/jpg') { extension = '.jpg'; } else if (type == 'image/png') { extension = '.png'; } })(that.openedFiles[0].type); fs.copy(temp_path, dirpath + opt.original.dest + id + extension, function(err) { if (err) { console.error(err); } else { // thumbnails im.crop({ srcPath: dirpath + opt.original.dest + id + extension, dstPath: dirpath + opt.thumb.dest + id + extension, width: opt.thumb.width, height: opt.thumb.height, quality: 1, gravity: 'Center' }, function (err, stdout, stderr){ if (err) {console.log('Thumbnail is not generated')} else { } }); } }); }); }); 

哪里可能是一个问题?

在云环境中,您不应该将图像上传到实例本身。 总是使用像S3这样的中央存储来存储您上传的文件。

在云环境中开发时,应始终记住,运行代码的当前框只能存活一定的时间(分钟,小时)。 所以如果这些情况下来,你会失去所有上传的文件。

例如,如果您有两个实例,并且您的用户上传图像以安装x,则可能会出现另一个问题。 现在,当第二个用户尝试查看映像,但负载平衡器将请求发送到实例y时,图像未find,因为该实例上不存在该映像。

为了debugging你的脚本,我会添加更多的日志logging。 然后在Heroku中,你可以使用:

 heroku logs -t -a appname 

观看您的应用程序的日志。