web-dev-qa-db-ja.com

vue js and axiosで複数のファイルをアップロードします

vuejsとaxiosを使用して複数の画像をアップロードしようとしていますが、サーバー側で空のオブジェクトを取得しています。ヘッダーにmultipart/form-dataを追加しましたが、まだ空のオブジェクトです。

_submitFiles() {
    /*
      Initialize the form data
    */
    let formData = new FormData();

    /*
      Iteate over any file sent over appending the files
      to the form data.
    */
    for( var i = 0; i < this.files.length; i++ ){
      let file = this.files[i];
      console.log(file);
      formData.append('files[' + i + ']', file);
    }

    /*`enter code here`
      Make the request to the POST /file-drag-drop URL
    */
    axios.post( '/fileupload',
      formData,
      {
        headers: {
            'Content-Type': 'multipart/form-data'
        },
      }
    ).then(function(){
    })
    .catch(function(){
    });
  },
_

HTML:

_<form method="post" action="#" id="" enctype="multipart/form-data">
    <div class="form-group files text-center" ref="fileform">
        <input type="file"  multiple="multiple">
        <span id='val'></span>
        <a class="btn"  @click="submitFiles()" id='button'>Upload Photo</a>
        <h6>DRAG & DROP FILE HERE</h6>
    </div>
_

私のサーバーサイドコード:

_class FileSettingsController extends Controller
{
    public function upload(Request $request){
        return $request->all();
    }
}
_

出力:

_{files: [{}]}
files: [{}]
0: {}
_

Console.log()の結果:File(2838972) {name: "540340.jpg", lastModified: 1525262356769, lastModifiedDate: Wed May 02 2018 17:29:16 GMT+0530 (India Standard Time), webkitRelativePath: "", size: 2838972, …}

3
weaver

$refsの使用を忘れました。入力にrefを追加します。

<input type="file" ref="file" multiple="multiple">

次に、次のようにファイルにアクセスします。

submitFiles() {

    let formData = new FormData();

    for( var i = 0; i < this.$refs.file.files.length; i++ ){
        let file = this.$refs.file.files[i];
        console.log(file);
        formData.append('files[' + i + ']', file);
    }

    axios.post( '/fileupload', formData, {
        headers: {
            'Content-Type': 'multipart/form-data'
        },
      }
    ).then(function(){
    })
    .catch(function(){
    });
},

これはうまくいくはずです。

6
Daniel

「データを一緒に送信するにはどうすればよいですか」と思っている人がいる場合は、次のようにします。

formData.append('name[' + this.name + ']', name);
formData.getAll('files', 'name');
0
Ahmad Hassan