Angularjs GraphicsMagck和Multer加载页面时,某些缩略图不显示
我使用Multer将上传的文件存储到/uploads/文件夹中,还使用GraphicsMagick将缩略图存储在/thumbs/中。 当我使用css在页面中显示缩略图时,效果很好,但当我尝试显示gm创建的缩略图时,如果有多个文件,则偶尔会失败。 以下是server.js部分:Angularjs GraphicsMagck和Multer加载页面时,某些缩略图不显示,angularjs,graphicsmagick,multer,Angularjs,Graphicsmagick,Multer,我使用Multer将上传的文件存储到/uploads/文件夹中,还使用GraphicsMagick将缩略图存储在/thumbs/中。 当我使用css在页面中显示缩略图时,效果很好,但当我尝试显示gm创建的缩略图时,如果有多个文件,则偶尔会失败。 以下是server.js部分: var express = require('express'); var multer = require('multer'); var app = express(); var bodyParse
var express = require('express');
var multer = require('multer');
var app = express();
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var config = require('./config');
var path = require('path');
var fs = require('fs');
var gm = require('gm');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/uploads/');
},
filename: function (req, file, cb) {
cb(null, file.originalname);
console.log('multer file originalname = ' + file.originalname);
gm('./public/uploads/' + file.originalname)
.resize(100, 100)
.gravity("Center")
.extent(100, 100)
.quality(75)
.noProfile()
.write('./public/thumbs/' + file.originalname, function (err) {
if (err) console.log(err);
});
}
});
var upload = multer({ storage: storage });
app.post('/', upload.array('file'), function(req, res){
res.status(204).end();
});
没有报告错误,文件正确保存在/uploads/和/thumbs/中。
我尝试在$location.path('/display')上使用$timeout代码>加载目标路径,但没有差异。
以下是display.html部分:
<div ng-repeat="f in display.files">
<div id="image_thumb">
<a ng-href="/uploads/{{f}}" target="_blank"><img src="/thumbs/{{f}}"></a>
<br><br>
<p id="thumbname">{{f}}</p>
{{f}
就像我说的,如果我使用css将拇指显示为:
<div ng-repeat="f in display.files">
<div id="image_thumb">
<a ng-href="/uploads/{{f}}" target="_blank"><img src="/uploads/{{f}}" class="displaythumb"></a>
<br><br>
<p id="thumbname">{{f}}</p>
{{f}
没有问题,所以我使用(误用)通用汽车的方式是错误的。有人可以帮忙吗。这里的问题是,当gm试图获取用于制作拇指的文件时,multer尚未完成将文件保存到/uploads/文件夹,因此答案是将gm代码块移动到app.post函数,这样gm现在只能获取存储的文件,并且没有错误:
app.post('/', upload.array('file'), function(req, res){
req.files.forEach(function(imageValues, key) {
var filename = imageValues.filename;
gm('./public/uploads/' + filename)
.resize(100, 100)
.gravity("Center")
.extent(100, 100)
.quality(75)
.noProfile()
.write('./public/thumbs/' + filename, function (err) {
if (err) console.log(err);
});
});
res.status(204).end();
});