Я пытаюсь загрузить некоторые изображения с React на сервер Koa и сохранить их в определенной папке.
Я попытался сделать это, поместив изображения в локальное состояние React и добавив их в объект FormData, и отправил объект FormData на сервер с помощью axios.post
Несмотря на то, что весь процесс, кажется, сделан правильно, я не могу ни найти, ни проанализировать изображения, которые я отправил на сервер. В нем говорится, что ctx.req.body и ctx.req.files не определены или пусты .. Я гуглил об этой проблеме и пытался использовать модули синтаксического анализа, такие как koa-bodyparser и koa-multer, но пока не получил удачи .. возможно, я этого не сделал сделай это правильно. Я прикрепил код из моего внешнего интерфейса и внутреннего интерфейса, поэтому, если вы поделитесь со мной каким-либо решением, я буду благодарен. Учитывая, что я полный нуб, пожалуйста, будьте конкретны.
Это код моего загружаемого компонента
class Uploader extends Component {
constructor(props) {
super(props);
this.state={
selectedFile: ''
}
}
onChangeHandler= (e) => {
this.setState({
selectedFile: e.target.files[0]
})
}
onClickHandler= () => {
const data=new FormData();
data.append('file', this.state.selectedFile, this.state.selectedFile.fileName);
for(var value of data.values()) {
console.log(value);
}
axios.post('http://localhost:4000/upload', data);
.then(() => {
console.log('axios.post successful... i guess...');
}).catch(() => {
console.log('axios.post failed...');
});
}
render() {
return (
<div>
<input type='file' name='file' onChange={this.onChangeHandler} />
<button type='button' onClick={this.onClickHandler}>Upload</button>
</div>
);
}
}
export default Uploader;
А это код сервера коа
const Koa=require('koa');
const Router=require('koa-router');
const cors=require('@koa/cors');
const bodyParser=require('koa-bodyparser');
const app=new Koa();
const router=new Router();
app.use(cors());
app.use(bodyParser());
app.use(async (ctx, next) => {
ctx.body=ctx.request.body;
next();
});
router.get('/upload', (ctx) => {
ctx.body='it worked!';
});
router.post('/upload', (ctx) => {
console.log('working finally...');
console.log('ctx.req.body');
console.dir(ctx.req.body); //undefined
console.log('-----');
console.log('ctx.req.files');
console.dir(ctx.req.files); //undefined
console.log('-----');
console.log('ctx.request.body');
console.dir(ctx.request.body); //{}
console.log('-----');
console.log('ctx.request.files');
console.dir(ctx.request.files); //undefined
console.log('-----');
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(4000, () => {
console.log('Koa server starts');
});
А это мои зависимости, на случай, если вам нужно знать ..
"dependencies": {
"@koa/cors": "^2.2.3",
"co-busboy": "^1.4.0",
"koa": "^2.7.0",
"koa-better-body": "^3.0.4",
"koa-body": "^4.1.0",
"koa-bodyparser": "^4.2.1",
"koa-cors": "0.0.16",
"koa-multer": "^1.0.2",
"koa-router": "^7.4.0",
"koa2-cors": "^2.0.6"
},
Я сжимал голову более недели и до сих пор не знаю, как ее решить ..
Я очень благодарен, если вы можете предложить мне какое-либо решение.
Я хочу проанализировать отправленные мной формоданные и сохранить изображения в определенной папке на сервере