Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs GraphicsMagck和Multer加载页面时,某些缩略图不显示_Angularjs_Graphicsmagick_Multer - Fatal编程技术网

Angularjs GraphicsMagck和Multer加载页面时,某些缩略图不显示

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

我使用Multer将上传的文件存储到/uploads/文件夹中,还使用GraphicsMagick将缩略图存储在/thumbs/中。 当我使用css在页面中显示缩略图时,效果很好,但当我尝试显示gm创建的缩略图时,如果有多个文件,则偶尔会失败。 以下是server.js部分:

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();
});