我有一个通过GridFS和Multer上传图像的存储引擎,图像一旦上传就被调整为正确的格式(个人资料图片被裁剪成用户想要裁剪/裁剪的方式,创建的移动缩略图等等。可以在我的本地服务器上无缝运行,但是当通过MLAB插件部署到Heroku时,认为它无法正常工作。
这里是存储引擎(我在这里提供了参考信息,它应该没有什么问题:
// Create storage engine
const storage = new GridFsStorage({
url: process.env.MONGODB_URI,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'fs'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
我认为这是问题所在,正如我所说的在本地服务器上100%正常工作。该位会根据用户调整图片的大小来调整图片的大小
let readstream = gfs.createReadStream(file.filename);
let outstream = gfs.createWriteStream({ filename: 'resized_' + file.filename, contentType: file.contentType})
let mobilestream = gfs.createWriteStream({ filename: 'mobile_' + file.filename, contentType: file.contentType})
gm(readstream)
.crop(
cropinfo.cropWidth,
cropinfo.cropHeight,
cropinfo.startCornerX,
cropinfo.startCornerY)
.resize(684)
.noProfile()
.stream()
.pipe(outstream)
这是JSON的副本,其中显示了两个正在创建的文件。如您所见,调整大小后的文档的“长度”为0。
{
_id: "5b4b2da655a6010014b48d3e",
length: 390745,
chunkSize: 261120,
uploadDate: "2018-07-15T11:19:31.579Z",
md5: "d23b23ff37c9520d813382a8735a0e7d",
filename: "2bd69c4d83e39f59f6c4ef1bb809529b.jpg",
contentType: "image/jpeg"
},
{
_id: "5b4b2dc355a6010014b48d4b",
filename: "icon_2bd69c4d83e39f59f6c4ef1bb809529b.jpg",
contentType: "binary/octet-stream",
length: 0,
chunkSize: 261120,
uploadDate: "2018-07-15T11:19:31.597Z",
aliases: null,
metadata: null,
md5: "d41d8cd98f00b204e9800998ecf8427e"
}
这真的令人沮丧,因为部署没有任何更改-现在它刚刚开始起作用。
这里有什么明显的我想念的吗?
编辑:
这是我的本地主机MongoDB的json副本,表明它正在工作
{
"_id" : ObjectId("5b4a1771eb439b062341de10"),
"filename" : "icon_39e532461840adfe2c5fd23f47374db9.jpg",
"contentType" : "binary/octet-stream",
"length" : 55657,
"chunkSize" : 261120,
"uploadDate" : ISODate("2018-07-14T15:32:01.790Z"),
"aliases" : null,
"metadata" : null,
"md5" : "a6e685a4398df23e6c517365e5979357"
}