#javascript #php #reactjs #apache #axios
Вопрос:
Я размещаю приложение react на своем сервере apache. Я использую пакет react-images-upload npm для получения изображения от пользователя, а затем отправляю его на свой php-сервер с помощью Axios.
Однако, когда я проверяю массив php $_FILES в ответе, он пуст.
Я проверил, может ли мой сервер получать файлы с небольшой формой загрузки на стороне php, и это отлично сработало, проверил ограничения памяти, что папка на сервере доступна для записи и тому подобное. Когда я console.log(миниатюра), я получаю файловый объект в консоли, поэтому загрузчик работает
кажется, все в порядке. Поэтому я подозреваю, что это как-то связано с вызовом Ajax.
Код переднего плана:
import React, { Component } from 'react'
import protocol from 'protocol.js';
import axios from 'axios';
import { Route, Switch, Redirect, useLocation } from "react-router-dom";
import styles from "components/Payment/Payment.module.css";
import "components/Payment/Payment.css";
import ImageUploader from 'react-images-upload';
var localStorage = require('local-storage');
class Payment extends Component {
constructor(props) {
super()
this.state = {
thumbnail: []
}
this.handlePayment = this.handlePayment.bind(this);
this.onDrop = this.onDrop.bind(this);
}
onDrop(thumbnail) {
this.setState({
thumbnail: this.state.thumbnail.concat(thumbnail),
});
}
handlePayment() {
var formData = new FormData();
formData.append("thumbnail", this.state.thumbnail);
axios.post('https://11.111.111.111/backend/ajax_controller.php', formData, {
headers:{
'Content-Type': 'multipart/form-data',
},
})
.then(resp => {
console.log(resp)
})
}
render() {
return (
<div className={styles.container}>
<ImageUploader
withPreview={true}
singleImage={true}
withIcon={true}
buttonText='Profilna slika'
onChange={this.onDrop}
imgExtension={['.jpg', '.png']}
maxFileSize={5242880}
fileSizeError={"too big"}
/>
<button className={styles.paymentButton} onClick={this.handlePayment}>Plati</button>
</div>
)
}
}
export default Payment;
Внутренний код:
print_r($_FILES);
if (move_uploaded_file($_FILES['thumbnail']['tmp_name'], __DIR__."/assets/".$_FILES['thumbnail']['name'])) {
echo "done";
} else {
echo "error";
}
Любая помощь была бы очень признательна.
Комментарии:
1. можете ли вы прикрепить снимок экрана исходящего запроса с вкладки «Сеть» в консоли браузера?
2. @TylerMiles Я добавил скриншоты
3. В нижней части вызова запроса должна быть прикреплена полезная нагрузка, подтверждающая, что файл был отправлен. Ваш снимок экрана отключается как раз перед этой информацией :/
4. Также я замечаю, что метод запроса-это ПАРАМЕТРЫ. Я не уверен, что это сработает, вы можете попробовать явно изменить его на POST.
5. @TylerMiles Я загрузил неправильный запрос 🙁 Я обновил скриншот, приношу извинения.
Ответ №1:
Я думаю, что это:
formData.append("thumbnail", this.state.thumbnail);
должно быть так:
formData.append("thumbnail", this.state.thumbnail[0]);
Комментарии:
1. Большое вам спасибо 🙂