Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Node.js 在express中未上载相同的图像_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 在express中未上载相同的图像

Node.js 在express中未上载相同的图像,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我尝试使用express上传图像,但我面临两个问题,第一,每当我再次上传同一图像时,它不会被上传;第二,在上传任何单个图像后,一个包含图像的文件也会被上传。这是我的密码 var multer = require('multer'); var uploads = multer({dest: './images'}); app.post('/uploading', uploads.single("file"), function (req, res) { var file = __dirna

我尝试使用express上传图像,但我面临两个问题,第一,每当我再次上传同一图像时,它不会被上传;第二,在上传任何单个图像后,一个包含图像的文件也会被上传。这是我的密码

var multer = require('multer');
var uploads = multer({dest: './images'});
app.post('/uploading', uploads.single("file"), function (req, res) {

   var file = __dirname +"/images" + "/" + req.file.originalname;

   fs.readFile( req.file.path, function (err, data) { 
        fs.writeFile(file, data, function (err,data) {
         if( err ){
              console.error( err );
              response = {
                   message: 'Sorry, file couldn\'t be uploaded.',
                   filename: req.file.originalname
              };
         }else{
               response = {
                   message: 'File uploaded successfully',
                   filename: req.file.originalname
              };
          }
          res.end( JSON.stringify( response ) );
       });
   });
})
uploads.single(“文件”)
中间件将处理文件上传。您不必专门
fs.读取
fs.写入
文件

var multer = require('multer');
var uploads = multer({dest: './images'});
app.post('/uploading', uploads.single("file"), function (req, res) {

   //the file is uploaded automatically

})
编辑:以上代码将上载文件名为十六进制字符串的文件,不带任何扩展名。

要添加重命名功能,您需要使用
diskStorage
。这是取自第页的代码

现在,您可以使用
uploads
变量作为中间件,如上面的代码片段所示


您可以根据需要编辑
filename:function(req,file,cb){..}
。现在,文件名将为.ext

另一种处理方法是不使用中间件,而是通过以下选项手动使用multer:

 try {
        var storage = multer.diskStorage({
            destination: function(request, file, callback) {

               //define folder here by fs.mkdirSync(anyDirName);

            },
            filename: function(req, file, callback) {

                callback(null, anyFileName);
            },
            limits: self.limits
        });

        var upload = multer({
            storage: storage,
            fileFilter: function(request, file, callback) {
                // here you can filter out what not to upload..
               } 
        }).any();

        upload(request, response, callback);
    } catch (e) {

    }

希望这有帮助

查克罗博蒂:这个问题的解决方案是什么?如何一次又一次地上传同一个图像,以及如何停止上传不需要的图像文件
fs.read
fs.write
正在创建附加文件。使用上述代码,可以随时上传相同的图像。因为每次上传后文件名都是不同的十六进制字符串。你能用这个代码检查一下吗?这是相当标准的,即使它在multer docsi刚刚检查过的文件中,相同的图像没有上传,但一个文件正在上传哦,哦,我现在知道你的问题了。这是意料之中的行为。默认情况下,multer上载文件名为随机字符串且没有扩展名的文件。上传时需要添加重命名功能。让我在回答中补充这一点。
 try {
        var storage = multer.diskStorage({
            destination: function(request, file, callback) {

               //define folder here by fs.mkdirSync(anyDirName);

            },
            filename: function(req, file, callback) {

                callback(null, anyFileName);
            },
            limits: self.limits
        });

        var upload = multer({
            storage: storage,
            fileFilter: function(request, file, callback) {
                // here you can filter out what not to upload..
               } 
        }).any();

        upload(request, response, callback);
    } catch (e) {

    }