Angular – Node Express – 大图片上传问题

我正在处理使用express.js,节点和angular度的file upload。 适用于小尺寸图像的基本function。 当我尝试上传更大的图像时,我得到了404错误。 我使用angular度file upload。 这是我的file upload编码

$upload.upload({ url: '/products/image/upload', data: { PRODUCT_ID : productId, }, file: file }).progress(function(evt){ console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total, 10)); }).success(function(data){ console.log(data); }); 

这是我的快速js代码

 app.post('/products/image/upload', controller.uploadProductImage); exports.uploadProductImage = function(req, res){ var fileObject = req.files.file; var newPath = ''; var newFilename = 'sample.png'; newPath = './uploads/products/' + newFilename; fs.rename(fileObject.path, newPath, function(err) { if (err) throw err; fs.unlink(fileObject.path , function() { if (err) throw err; }); }); res.json({success:true}); 

};

我只在这里发布了示例代码。 它适用于较小尺寸的图像。 但是,如果我上传一个大尺寸的图像,路由显示为404错误消息。 我希望这将是一些configuration问题,如内存,进程限制。 我不确定什么是确切的问题。

我试图在expression脚本中设置限制

 app.use(express.limit('2mb')); 

这不适合我。 我试了

 node --max-old-space-size=2000 app.js 

厄运。 请帮我解决这个问题

提前致谢

       

网上收集的解决方案 "Angular – Node Express – 大图片上传问题"

我一直试图让我的头在使用Angular,Node和Express自己的file upload。 我正在使用Express v4.1与connect-busboy,并具有以下Node,Express Code与Daniel Faridsangular度file upload模块一起工作。

  SERVER.JS

     var express = require('express');  // Express Web Server
     var busboy = require('connect-busboy');  //表单/file upload的中间件
     var path = require('path');  //用于文件path
     var fs = require('fs-extra');  //文件系统 - 用于文件操作
     var util = require('util');         

     var app = express();
     app.use(busboy的());
     app.use(express.static(path.join(__ dirname,'public')));

     / * ================================================ ==========
    创build一个路线(/上传)来处理表单提交
     (处理POST&PUT请求/上传)
     Express v4路由定义
     ================================================== ========== * /
     app.route( '/上传')
     .post(function(req,res,next){
       var arr;
       var fstream;
       var filesize = 0;
       req.pipe(req.busboy);

       req.busboy.on('file',function(fieldname,file,filename,encoding,mimetype){        
         //上传的文件名,编码,MIMEtypes
         console.log('File ['+ fieldname +']:filename:'+ filename +',encoding:'+ 
              encoding +',MIMEtypes:'+ mimetype);

         //上传的文件大小
         file.on('data',function(data){
           console.log('File ['+ fieldname +'] got'+ data.length +'bytes');
           fileSize = data.length;
           console.log(“fileSize =”+ fileSize);
         });

         file.on('end',function(){
           console.log('File ['+ fieldname +'] ENDed');
          的console.log( “-------------------------”);
         });

         / *
        填充数组
        我正在收集关于文件的数据读取文件信息。 这可能是更正确的  
        文件保存到img文件夹后读取文件数据  
         file.pipe(stream)完成文件大小可以使用stats.size得到,如图所示 
        下面
         * /
         arr = [{fieldname:fieldname,filename:filename,encoding:encoding,MIMEtype:   
            的mimetype}];

         //图片上传的path
         fstream = fs.createWriteStream(__ dirname +'/ img /'+ filename);
         //创build一个可写的stream

         file.pipe(fstream的);  //将发布的数据传递给文件

         //stream结束 - (写入的数据)发送回应
         req.on('end',function(){
         res.writeHead(200,{“content-type”:“text / h tml”});  // http响应头

         //res.end(JSON.stringify(arr));  // http响应正文 - 发送json数据
       });

       //完成写入stream
       fstream.on('finish',function(){
         console.log('Finished writing!');

         //获取文件保存到服务器的文件统计信息(包括大小)
         fs.stat(__ dirname +'/ img /'+ filename,function(err,stats){
          如果(ERR)
            扔呃;    
         //如果一个文件
           if(stats.isFile()){
             //console.log("It''sa file&stats.size =“+ JSON.stringify(stats));
             console.log(“文件大小保存到服务器:”+ stats.size);    
            的console.log( “-----------------------”);
           };
         });
       });

        //错误
        fstream.on('error',function(err){
         的console.log(ERR);
        });
       });  // @ END / .req.busboy
     })// @ END / POST

查看[My GitHub]( https://github.com/mick26/ng_Node-AdvancedFileUpload

请注意,Express 4.1中内置的许多中间件都省略了。 您将无法使用req.files,因为此函数是称为“有力”的第三方中间件的一部分,该另一个中间件称为“bodyParser”。 我觉得NPM和body-parser都是可用的。 相反,我使用了一个名为connect-busboy的npm模块,并对数据进行stream式传输。 我刚刚检查了程序,成功上传了一个> 320M的文件。 希望这可以帮到你。