Sails JS中的多文件上传从表单中逐个推送S3

时间:2016-12-06 09:06:14

标签: file-upload amazon-s3 sails.js

我正在尝试使用Sails JS从表单上传多个文件。 我不确定如何在发布表单时获取多个文件。收到文件后,我会迭代它以将其上传到AWS的S3。

单上传对我有用,但不是多个。 这里是上传项目的github链接。 https://github.com/psudeep/sailsFileUpload/

module.exports = {
    upload: function (request, response) {
        request.file('file').upload(function (err, file ) {
        //console.log(file.length);
          if(_.size(file) >= 0) {
            file = _.first(file);
            //console.log(file);
            // let file_type = _.split(file.type, '/', 2);
            // let file_ext = file_type[1];
            // let new_file_name = file_name + "." +file_ext;
            let new_file_name = "Test.jpg";
            let originalFilePath = file.fd;

            //S3 upload service working for single upload - this function will be in loop for multiple files
            S3UploadService.upload_file(originalFilePath,new_file_name, function (err, result) {
              if(err) {
                response.redirect("/upload?success=false");
              } else {
                return response.status(200).send({success: true,message:"Successfully uploaded", data: result});

              }
            });
          }
        });
    }
}

==========================表格在下面================== ===========

<form name="upload" method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" class="input03" name="file[]"><br/>
    <input type="file" class="input03" name="file[]"><br/>
    <input type="file" class="input03" name="file[]"><br/><br/>
    <input type="submit" name="submit" value="Upload">
</form>

是否有人可以帮助了解如何在表单后获取多个帖子? 你可以从回购中拉出来,然后在那里提交。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

  1. 要理解它,请尝试userdb $1 set uid=5000 gid=5000 home=/var/mail/$1 mail=/var/mail/$1 <<EOF userdbpw -md5 | userdb $1 set systempw $2 $2 EOF (我建议重命名sails.log(file)

  2. 您会发现,当有多个文件时,您会有一系列文件。

  3. 然后遍历此数组,例如使用request.file('file').upload(function (err, files)并为每个文件执行所需操作。

  4. 您的HTML存在错误。您需要为每个文件提供单独的索引,如:

    Array.forEach
  5. 现在应该可以了。

答案 1 :(得分:0)

在模板文件中,请执行以下操作。

   <form method="POST" action="/upload" enctype="multipart/form-data">
   <div class="field">
      <label for="image">Image Upload</label>
      <input type="text" name="file_name" id="name">
      <input type="file" name="file" id="file1" multiple/>
   </div>
   <input type="submit" class="btn" value="Save">
   </form>

在控制器中执行以下操作。我刚刚使用Math.Random()函数为每个文件指定了不同的名称。

request.file('file').upload(function (err, uploadedFiles) {
      //console.log(file);
      var data = [];
      async.each(uploadedFiles,
        function (uploadedFile, callback) {
          S3UploadService.upload_file(uploadedFile.fd, file_name + "_"+Math.random(), function (err, result) {
            data.push(result);
            callback(err, result);
          });
        }
        , function (err) {
          // if any of the saves produced an error, err would equal that error
          if (err) {
            console.log(err);
          } else {
            console.log(data);
            return response.status(200).send({success: false, message: "failed to upload", data: data});
          }
        });

    });