Загрузка файла не работает через axios и laravel

#javascript #reactjs #laravel #axios

#javascript #reactjs #laravel #axios

Вопрос:

Я перепробовал все предыдущие способы, но ни один из них мне не помог. Я пытаюсь загрузить файл через axios:

 const [file, setFile] = useState(null)
setFile(event.target.files[0]);     
const uploadFile = () => {
      const formData = new FormData(); 
      formData.append('myFile', file); 
      api.createFile(formData).then(res => {
         console.log(res.data);
      })      
    }

const axios = window.axios
const BASE_API_URL = 'http://localhost:8000',
const config = { headers: { 'content-type': 'multipart/form-data'}}      
export default {
  createFile: formData =>  
    axios.post(`${BASE_API_URL}/tickets/createFile`, formData, config)
}
 

Я уже проверил переменную ‘file’ через журнал, и она существует. Но когда я получаю это в laravel:

 Route::post('/tickets/createFile', function (Request $request){
  return response()->json([
    'file' => $request->file('myFile')
  ]);
});
 

НАКОНЕЦ: я получаю пустой ответ, что означает, что я не могу его сохранить, потому что получаю нулевое значение

Комментарии:

1. вам нужно написать код для загрузки файла laravel.com/docs/8.x/filesystem#storing-files

2. Вы не сохраняете файл нигде в своей системе? вы просто хотите вернуть имя файла или что? Если вы хотите загрузить его, вам нужно его сохранить.

3. @Ashu Я уже пытался сохранить его, но я получаю сообщение об ошибке, что файл равен нулю, так как я просто проверяю его некоторое время, отправляя обратно через ответ

4. Можете ли вы убедиться, что в инструментах разработки есть файл с именем myFile и он двоичный? в данных запроса

5. @Ashu У меня есть данные формы и мой файл: (двоичный)

Ответ №1:

Вы ожидаете файл в ответе JSON, но когда вы обращаетесь к файлу с помощью $request->file('myFile') , он возвращает экземпляр IlluminateHttpUploadedFile , и когда вы возвращаете json, он вернет пустой объект, поскольку IlluminateHttpUploadedFile не преобразуется в json подобные модели, поскольку для него нет toJson() метода.

если вы сбросите и умрете $request->file(‘myFile’)

  Route::post('/tickets/createFile', function (Request $request){
     dd($request->file('myFile'));
  });
 

Вы должны иметь возможность видеть ваш загруженный файловый объект. Итак, вы можете продолжить сохранение файла с помощью Storage::put() метода