节点Js图像上传不起作用

时间:2016-06-24 06:36:06

标签: javascript node.js

我需要使用节点js将图像上传到服务器。图像来自ios app作为文件数据。我使用了以下代码,

 var fs = require("fs");
    var imageName = req.files.profile_image.name;
    fs.readFile(req.files.profile_image.path, function (err, data) {
    console.log(imageName);
    // If there's an error
    if(!imageName){
      console.log("There was an error")
      //res.redirect("/");
      //res.end();
    } else {
        console.log(data);
      var newPath = 'http://example.com/images/' + imageName;
      // write file to uploads/fullsize folder
      fs.writeFile(newPath, data, function (err) {
        // let's see it
        console.log(err);
        //res.redirect("http://example.com/images/" + imageName);
      });
    }
  });

当我运行此代码时,我没有收到任何错误,但图像未上传到图像文件夹中。

我在fs.writeFile中遇到以下错误,

   { Error: ENOENT: no such file or directory, open 'http://example.com/images/user-profile.jpg'
    at Error (native)
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: 'http://example.com/images/user-profile.jpg' }

请帮忙。

2 个答案:

答案 0 :(得分:2)

你不能把你收到的图像写成网址。
它应该是运行应用程序的服务器上的本地路径。

fs.readFile(req.files.displayImage.path, function (err, data) {
  // ...
  var newPath = __dirname + "/uploads/uploadedFileName";

  fs.rename(files.upload.path, _path +'/'+ img_name + '.png', function (error) {
    res.redirect("back");
  });
});

也不要将图像重新写入新路径,而是将其移动(使用rename()):

/* @var \Zend\Mvc\View\Http\RouteNotFoundStrategy $strategy */
$strategy = $this->getServiceLocator()->get('HttpRouteNotFoundStrategy');
$strategy->setNotFoundTemplate('application/other/404');

$view = new ViewModel();
//$view->setTemplate('application/other/404');
return $view;

答案 1 :(得分:-1)

在app.js中使用此

app.use('/ uploads',express.static('uploads'));