programing

axios/larabel/formdata 게시 요청이 비어 있습니다.

javaba 2022. 8. 14. 17:57
반응형

axios/larabel/formdata 게시 요청이 비어 있습니다.

파일을 업로드하고 싶은데, Axios로 투고하면 폼데이터가 larabel의 빈 요청입니다.

업로더표시하다

filesChange(e) {
    const fileList = e.target.files;
    const formData = new FormData();
    if (!fileList.length) return;
    for (let i = 0; i < fileList.length; i += 1) {
      console.log(fileList[i]);
      formData.append('files', fileList[i], fileList[i].name);
    }
    this.save(formData);
  },

모든 파일이 루프되어 formData에 추가됩니다.

save(formData) {
    photosApi.storePhotos(formData, this.galleryId).then((response) =>     {
        console.log(response);
    }).catch((error) => {
        console.log(error);
    });
},

vuejs: photosApi.js

storePhotos(formData, id) {
    return axios.post(`api/photo/${id}`, formData);
},

api-call을 검사하면 이걸 볼 수 있어요.

larabel: api.disples

Route::post('/photo/{id}',  'PhotoController@store');

라라벨:포토 컨트롤러php

public function store(Request $request, $id)
{
    return $request->all(); 
}

내 답변은 공허할 뿐이다...내 답변은 공허할 뿐이다...

뭘 잘못하고 있는 거야?

드디어 해결했습니다:)

첫 번째 문제는 이 선이었다

formData.append('files', fileList[i], fileList[i].name);

append는 항상 마지막 "파일" 항목을 덮어씁니다...(완전히 효과가 있는 줄 알았어요)

그래서 첫 번째 해결책은

formData.append(`file${i}`, fileList[i], fileList[i].name);

데이터가 사용되지 않는 것을 확인하다

return $request->all();

대신 사용하다

print_r($request->all());

이제 아파콜을 검사하면 유용한 것을 볼 수 있습니다.

여기에 이미지 설명 입력

이제 그것은 쉬웠다

$data = $request->all();
foreach ($data as $key => $file) {
    $file->move('/public/images', $file->getClientOriginalName());
};

모든 파일이 폴더에 저장됩니다.

갱신: 「 「 」로 파일을 쓰면, 데이터도 어레이로서 취득할 수 있습니다.

for (let i = 0; i < fileList.length; i += 1) {
    formData.append('files[]', fileList[i], fileList[i].name);
}

또, 컨트롤러에서는, 이 행으로 파일에 액세스 할 수 있습니다만, 「」는 사용하지 않습니다.

$files = $request->file('files');

언급URL : https://stackoverflow.com/questions/46681010/axios-laravel-formdata-post-request-is-empty

반응형