nodejs写简单图像blob - Upload.dataUrltoBlob

时间:2016-02-28 06:35:28

标签: angularjs node.js ng-file-upload

简单的问题。如何从角度保存Nodejs中的图像blob。

AngularSide:

$scope.upload = function (dataUrl, picFile) {

  Upload.upload({
    url: 'http://test.dev:3000/register/user/uploads',
    data: {
      file: Upload.dataUrltoBlob(dataUrl, picFile.name)
    },
  }).then(function (response) {
    $timeout(function () {
      $scope.result = response.data;
    });
  }, function (response) {
    if (response.status > 0) $scope.errorMsg = response.status
      + ': ' + response.data;
  }, function (evt) {
    $scope.progress = parseInt(100.0 * evt.loaded / evt.total);
  });
}

nodejs方面:我在这里需要中间件吗?如果是的话我应该使用哪一个?

router.post('/user/uploads', multipartMiddleware, function(req, resp) {

     var newPath = "/Users/testUser/test_hold_files/" + req.files.file.originalFilename;

     fs.writeFile(newPath, req.files.file, function(err) {

         if (err) {
             console.log("Data Error ");
             return console.error(err);
         }
     });

    res.status(200).jsonp({status: "status: success "});
});

现在这只是用正确的名称写出文件,但它是空的。

2 个答案:

答案 0 :(得分:1)

您曾经能够通过req.files.imageName访问上传的文件,然后您将从{tmp} fs.readFile永久写入,而快递4.0则不再是这种情况

  

在Express 4中,默认情况下req.files在req对象上不再可用。要访问req.files对象上的上传文件,请使用多部分处理中间件,如busboy,multer,formidable,multiparty,connect-multiparty或pez。

Soooooooo,您可以随意使用上述任何一个中间件名称,然后按照其API处理上传的文件,如图像。希望这有帮助,享受。

答案 1 :(得分:0)

确定,

经过很长一段时间搞乱这些东西。我找到了答案。它确实将文件加载到我的文件夹中。

我觉得这只是部分的,因为它不会将实际文件的大小调整得更小。它是https://github.com/danialfarid/ng-file-upload选择的内容。

  Upload.upload({
    url: 'http://test.dev:3000/register/user/uploads',
    data: {
      file: Upload.dataUrltoBlob(dataUrl, picFile.name)
    },

这确实放大了所选图像上的文件。它没有使实际文件大小变小。我还在调查这个问题。

var formidable = require('formidable'),
    util = require('util'),
    fs_extra   = require('fs-extra');

这是我接受图片的帖子。

router.post('/user/uploads', function (req, res){
    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
        res.writeHead(200, {'content-type': 'text/plain'});
        res.write('received upload:\n\n');
        res.end(util.inspect({fields: fields, files: files}));
    });

    form.on('end', function(fields, files) {
        /* Temporary location of our uploaded file */
        var temp_path = this.openedFiles[0].path;
        /* The file name of the uploaded file */
        var file_name = this.openedFiles[0].name;
        /* Location where we want to copy the uploaded file */
        var new_location = "/Users/testUser/test_hold_files/";

        fs_extra.copy(temp_path, new_location + file_name, function(err) {
            if (err) {
                console.error(err);
            } else {
                console.log("success!")
            }
        });
    });
});

我还注意到我可以在chrome中查看该文件但不将其加载到gimp中。 Gimp给了我一个文件错误。

我猜是小步骤。

也许Datsik可以给我们一些关于这里发生了什么的见解。 https://stackoverflow.com/users/2128168/datsik

菲尔