#javascript #php #reactjs #laravel-5.8
#javascript #php #reactjs #laravel-5.8
Вопрос:
Я использую следующий инструмент react-images-upload
import React, { useState } from "react";
import ImageUploader from "react-images-upload";
const App = () => {
const [image, setImage] = useState();
const handleSubmit = () => {
console.log(image[0]);
axios
.post(
"http://192.168.1.6:8001/api/upload",
{ image: image[0] },
{
headers: headers,
}
)
.then((response) => {
console.log(response);
});
};
return (
<div>
<ImageUploader
withIcon={true}
singleImage={true}
onChange={(p) => setImage(p.concat(p))}
imgExtension={[".jpg", ".gif", ".png", ".jpeg"]}
maxFileSize={4242880}
withPreview={true}
withIcon={true}
className="text-center"
/>
<button onClick={handleSubmit}>Upload</button>
</div>
);
};
export default App;
И в коде php:-
public function upload(Request $request)
{
return response()->json($request->all());
}
В php значение $request->all() не отображает файл, отправленный в react request:-
Как правильно отправить запрос с файлом / изображением на серверную часть php?
Ответ №1:
Выполните приведенную ниже команду:
import React, { useState } from "react";
import ImageUploader from "react-images-upload";
const headers = {
Accept: "application/json", "Content-Type": "multipart/form-data; boundary=---------------------------974767299852498929531610575",
}
const App = () => {
const [image, setImage] = useState();
const handleSubmit = () => {
console.log(image[0]);
axios
.post(
"http://192.168.1.6:8001/api/upload",
{ image: image[0] },
{
headers: headers,
}
)
.then((response) => {
console.log(response);
});
};
return (
<div>
<ImageUploader
withIcon={true}
singleImage={true}
onChange={(p) => setImage(p.concat(p))}
imgExtension={[".jpg", ".gif", ".png", ".jpeg"]}
maxFileSize={4242880}
withPreview={true}
withIcon={true}
className="text-center"
/>
<button onClick={handleSubmit}>Upload</button>
</div>
);
};
export default App;
На самом деле вам не хватает заголовков «multipart / form-data»
Комментарии:
1. Я пробовал, не получил ошибку в ответе api>Предупреждение</b>: отсутствует граница в multipart/form-data Данные POST в <b>Неизвестно</b> в строке <b>0
2. «Content-Type»: «составные / данные формы; граница=—————————974767299852498929531610575» Добавьте этот тип граничного значения
3. Решается с помощью var bodyFormData = new FormData(); bodyFormData.append(«image», image[0]); затем в теле запроса bodyFormData axios автоматически определит тип содержимого нет необходимости настраивать вручную, пожалуйста, обновите свой ответ, добавив эти строки