Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
Javascript 使用node.js从表单上载照片_Javascript_Html_Node.js_Parsing_Post - Fatal编程技术网

Javascript 使用node.js从表单上载照片

Javascript 使用node.js从表单上载照片,javascript,html,node.js,parsing,post,Javascript,Html,Node.js,Parsing,Post,我对node很陌生,需要一些指导和帮助。在进一步讨论之前,我尝试在没有任何其他框架(如Express)的情况下实现这一点。情况如下: 我有一个表单,用户可以将照片上传到节点中运行的服务器。该表单具有以下属性 <form action="/newImages/" method="post" enctype="multipart/form-data"> File goes : <input type="file" name="fileName"><br>

我对node很陌生,需要一些指导和帮助。在进一步讨论之前,我尝试在没有任何其他框架(如Express)的情况下实现这一点。情况如下:

我有一个表单,用户可以将照片上传到节点中运行的服务器。该表单具有以下属性

<form  action="/newImages/" method="post" enctype="multipart/form-data">
    File goes : <input type="file" name="fileName"><br>
    <input type="submit" value="Submit">
</form> 
然而,有些事情告诉我,我需要以不同的方式解析数据,因为数据的输出是不可读的。它看起来像: “\n\r\n����\u0000\u0010JFIF\u0000\u0001\u0001\u0001\u0000
\u0000
\u0000\u0000��\u0000C\u0000\b\u0006\u0006\u0007\u0006\u0005\b\u0007\u0007\u0007\t\b\n\f\u0014\r\f\u000b\u000b“

你有什么办法让它发挥作用吗?我还应该注意,我只上传.jpg


谢谢

我认为你保存照片时错了。您不需要使用fs.writeFile(),而需要使用fs.rename

此cose在我的app.js中起作用:

app.post('/upload', function (req, res) {
    var tempPath = req.files.file.path,
        name = '',
        targetPath = '';

    fileExist = true; 
    fileNumber = 0;

    var fileType = path.extname(req.files.file.name);
    var fileName = path.basename(req.files.file.name,fileType);

    while (fileExist) {

      fileNumber_str = fileNumber.toString(); 

      var current = fileName + "_" +fileNumber_str + fileType;
      console.log("Controllo per "+current);

      if (fs.existsSync(__dirname + "/images/orig/" + current)) {
          console.log("--> Esiste");
          fileNumber++;
      } else {
          var newPath = __dirname + "/images/orig/" + current;
          console.log("nuovo nome : "+newPath);
          fs.rename(tempPath, newPath, function(err) {
                if (err) throw err;
                //Ora creo il thumb
                console.log("Upload completed!");
            });
          break;
      }
    }

    res.redirect("/");
        res.end();    
});
看一看


M.

似乎无法使用
querystring.parse来解析多部分数据

您必须编写自己的解析器或使用第三方模块,如

对于多方模块,代码如下所示:

if (req.method == 'POST' && req.url == '/newImages/') {
  var form = new multiparty.Form();
  form.parse(req, function(err, fields, files) {
    var tmp = files.fileName[0].path;
    fs.rename(tmp, '/your/dir/img.jpg', function(err) {
      if (err) throw err;
      console.log('success');
    });
    res.end('Found!');
 });
}

在writeFile调用中将编码指定为二进制,就像我在一小时前的另一篇文章中告诉你的那样。。。
if (req.method == 'POST' && req.url == '/newImages/') {
  var form = new multiparty.Form();
  form.parse(req, function(err, fields, files) {
    var tmp = files.fileName[0].path;
    fs.rename(tmp, '/your/dir/img.jpg', function(err) {
      if (err) throw err;
      console.log('success');
    });
    res.end('Found!');
 });
}