我正在尝试将一个图像文件(驻留在本地)从我的react单页前端应用程序发送到我的flask后端。我尝试过但不限于捕获我的内容类型并在前端指示encType。尽管如此,post请求表明它是成功的。但是,当我记录请求时。文件,请求。表格,请求。值,我没有数据输入。显然,有些东西我错过了,我真的需要任何人的帮助。谢谢
网页前端工程师:
import React, { Component } from 'react';
import axios from 'axios';
import logo from './logo.svg';
import './App.css';
// const qs = require('querystring');
class App extends Component {
constructor(props){
super();
this.state = { imagePreviewUrl: '', file: '' };
this._handleSubmit = this._handleSubmit.bind(this);
this._handleImageChange = this._handleImageChange.bind(this);
this.uploadImage = this.uploadImage.bind(this);
}
_handleImageChange(e){
e.preventDefault();
let file = e.target.files[0];
let reader = new FileReader();
reader.onloadend = () => {
this.setState({ file: file,
imagePreviewUrl: reader.result });
}
reader.readAsDataURL(file);
}
_handleSubmit(e){
e.preventDefault();
console.log("file value before this.uploadImage call:",this.state.file);
this.uploadImage(this.state.file);
}
uploadImage(filepath){
let imageFormData = new FormData();
imageFormData.append('filepath', filepath, filepath.name);
let newHeaders = new Headers({
"Content-type": "image/png"
});
console.log("checking if imageFormData has value:",imageFormData.has('filepath'));
return axios.post('/add', newHeaders, imageFormData)
.then((response) => {
console.log("response:", response);
})
.catch((err) => {
console.log("error:", err);
});
}
render() {
let { imagePreviewUrl } = this.state;
let $imagePreview = null
if (imagePreviewUrl){
$imagePreview = ( <img src={imagePreviewUrl} />);
}
else {
$imagePreview = (<div className="previewText">Please select an Image for Preview</div>);
}
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<form onSubmit={this._handleSubmit}>
<div>
<label htmlFor="image_uploads">Choose images to upload (PNG, JPG)</label>
<input type="file" id="image_uploads" name="filepath" encType="multipart/form-data" onChange={this._handleImageChange}/>
</div>
<div>
<button type='submit'>Submit</button>
</div>
</form>
<div>
{$imagePreview}
</div>
</div>
);
}
}
export default App;
后端:
from flask import Flask, request, render_template, send_from_directory
gunicorn_error_logger = logging.getLogger('gunicorn.error')
app.logger.handlers.extend(gunicorn_error_logger.handlers)
app.logger.setLevel(logging.DEBUG)
app = Flask(__name__)
@app.route('/', methods=['GET'])
def root():
app.logger.debug("Inside root route")
return render_template('index.html')
@app.route('/add', methods=['POST'])
def add_handler():
app.logger.debug("Inside add route")
app.logger.debug("Request Params: {}".format(request))
app.logger.debug("Values: {}".format(request.values))
app.logger.debug("Form: {}".format(request.form))
app.logger.debug("Files: {}".format(request.files))
return "got it"
从React调用文件上载
function onFileUpload(event){
const fileblob = new Blob([event.target.files[0]], { type: 'image/png' });// WORKS much better (if you know what MIME type you want.
let data = new FormData();
data.append('file', imageBlob);
return axios
.post(`http://localhost:3030/imagerecog`, data, {
headers: {
'Content-Type': 'multipart/form-data',
},
})
.then(res => {
console.log(res)
return res
});
}
pythonapi安装模块
py -m pip install Pillow
使用模块显示或保存blob中的文件
@app.route('/imagerecog', methods = ['GET', 'POST'])
def imagerecog():
if request.method == 'POST':
print("Recieved Image File")
file = request.files['file']
print('File from the POST request is: {}'.format(file))
img = Image.open(file.stream)
# img.show()
img.save("recogImage.jpg")
return "Success"
return 'Call from get'
我在试图向服务器发送声音Blob时遇到了同样的问题。如果仅在请求时调用此方法,则可以通过调用request.get_data()
来接收数据(请参阅:https://stackoverflow.com/a/23898949/1058203)。然而,我发现没有简单的方法以正确的方式解析这些数据。什么对我有用:
首先在客户机上将blob转换为base64,并将其作为Json发送到服务器:
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
var base64audio = reader.result;
// may not apply or differ in your case
var prefixToDrop = 'data:audio/wav;base64,';
var base64audioCut = base64audio.substring(prefixToDrop.length);
callbackFn(base64audioCut)
};
使用JQuery在回调中发送到后端:
$.ajax({
type: 'POST',
url: '/receiveAudio',
data: JSON.stringify({
"type": "wav",
"base64audio" : base64audioCut
}),
dataType:"json",
processData: false,
contentType: "application/json;",
success: function(x){...},
error: function(x){...},
processData: false
});
后端:
@app.route('/receiveAudio', methods=['POST'])
def receiveAudio():
dataKey = 'base64audio'
json = request.get_json()
if not dataKey in json:
return abort(400, "Missing 'base64audio' key")
base64_decoded = base64.b64decode(json[dataKey])
目前我正在做一个项目,我试图上传一个图像从反应前端到Spring启动后端。我能够成功上传我的图像,并将其存储在我的“目标/类/静态/公共/资产”文件夹中。我还将路径存储在我的数据库中,即“/public/资产/image_name.jpg”。构建“. jar”文件后,当我尝试访问图像时,它会给我这个错误消息。但是我能够访问我存储在“/资源/静态/”文件夹中的那些图像。 我知道这是一个配置问题。但我
我正试图通过React将文件上载到s3存储桶,我正在与4xx和5xx进行斗争:( 下面是我的代码库: 如果我发了这篇文章,我会得到500英镑,而这个错误是: java.io.IOException:UT000036:解析多部分数据时连接终止 我还注意到documents属性为空: 这是后端的API文档: 谢谢!
本文向大家介绍python后端接收前端回传的文件方法,包括了python后端接收前端回传的文件方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python后端接收前端回传的文件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我希望能够从开发和生产的前端直接将图像上传到ReactJS公共文件夹。对于生产,我使用带有nodejs后端的heroku应用程序。 从我在网上找到的所有使用ReactJS上传图像的教程中,他们都使用服务器端将图像上传到云,但我想知道是否有可能像Lavarel那样将图像上传到公共文件夹,这样做是否有任何缺点?
我正在尝试制作一个应用程序,允许注册用户提交一个图像文件(.jpeg、.png等)以及该图像的标题,但我很难思考如何做到这一点。我需要将图像发送到amazon AWS S3存储桶,我知道如何做到这一点,但添加标题输入让我很困惑,因为如何将文件和标题从我的前端(JSON)获取到后端API,并将其保存到我的帖子数据库(JPA)。我有一个user_post数据库,它有以下列:ID(post ID主键)、
我可以上传图片在数据库,但不能上传到“文件”文件夹。万维网 这是图像上传servlet。一旦图像被上传,它就应该被插入到files文件夹中。我不知道我犯了什么错误。谁能告诉我出了什么问题吗?我需要添加上传目录或文件路径C:inside吗?