2016-12-06 6 views
0

Sails JSを使用して複数のファイルをフォームからアップロードしようとしています。 フォームの投稿時に複数のファイルを取得する方法がわかりません。ファイルを受け取ったら、それをAWSのS3にアップロードするために繰り返します。フォームからSails JSで複数のファイルをアップロードし、S3を1つずつ押し込みます

シングルアップロードは私のために働いていますが、複数ではありません。 プロジェクトがアップロードされている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> 

複数の投稿後のフォームの取得方法を理解できる人は誰ですか? リポジトリから引き出してそこにコミットすることもできます。

ありがとうございます! (私はあなたが複数のファイルがあるとき、あなたはファイルの配列を持っていることがわかりますrequest.file('file').upload(function (err, files)

  • の名前を変更することをお勧めしますsails.log(file)にしようと、それを理解するには

  • 答えて

    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}); 
          } 
         }); 
    
        }); 
    
    0
    1. その後この配列を繰り返し、たとえばArray.forEachとし、すべてのファイルで必要なことを行います。

    2. あなたはHTMLにバグがあります。以下のようなファイルがあります:

      <input type="file" class="input03" name="file[0]"><br/> 
      <input type="file" class="input03" name="file[1]"><br/> 
      <input type="file" class="input03" name="file[2]"><br/><br/> 
      
    3. これで動作します。

    +0

    これはうまくいきません... – prashantsudeep

    +0

    レポを引き出してよりよく理解することができますか – prashantsudeep

    関連する問題