Reactjs React在服务器上存储图像的最佳做法
嘿,我正在使用react和flask后端,我正在尝试创建一个表单,在这个表单中,用户可以上传应该发送到后端并存储在数据库中的图像。 所以这是我的方法,但我不确定哪种格式最适合存储在数据库中。 FormData是一个好的解决方案吗Reactjs React在服务器上存储图像的最佳做法,reactjs,database,image,file,flask,Reactjs,Database,Image,File,Flask,嘿,我正在使用react和flask后端,我正在尝试创建一个表单,在这个表单中,用户可以上传应该发送到后端并存储在数据库中的图像。 所以这是我的方法,但我不确定哪种格式最适合存储在数据库中。 FormData是一个好的解决方案吗 // updates thumbnail in state when new file is selected handleFileSelect = (event) => { this.setState({ thumbnail: even
// updates thumbnail in state when new file is selected
handleFileSelect = (event) => {
this.setState({
thumbnail: event.target.files[0],
});
};
// File Upload
handleFileUpload = (event) => {
const fd = new FormData();
fd.append("image", this.state.thumbnail, this.state.thumbnail);
axios.post("url", fd).then((res) => {
console.log(res);
});
};
如果您使用的是
axios
,那么我建议您使用一个组件来执行文件上传功能,该组件使用onChange
来监听事件.target.files
和输入类型文件
。甚至可以通过html属性accept
添加接受的类型
您可以使用FileReader
,允许您读取存储在用户计算机上的文件内容(异步)。将其作为一个单独的函数使用,可以使用FileReader
方法提取Base64
获取表单数据:
const formData = new FormData();
formData.append('file', file);
const progressPercentage = Math.round(progressEvent.loaded / progressEvent.total * 100);
那么您的axios
看起来就像这样
axios({
method: 'post',
headers: {
'Content-Type': 'multipart/form-data',
},
data: dataForm,
url: 'urlhere',
onUploadProgress: (ev: ProgressEvent) => {
//Uploading progress functionality here....
},
})
.then((resp) => {
fetchBase64(file, (uri: string) => {
//maybe set a useState here for the Image URI or upload status.
});
})
.catch((err) => console.error(err));
进度功能:
const formData = new FormData();
formData.append('file', file);
const progressPercentage = Math.round(progressEvent.loaded / progressEvent.total * 100);
如果您使用的是
axios
,那么我建议您使用一个组件来执行文件上传功能,该组件使用onChange
来监听事件.target.files
和输入类型文件
。甚至可以通过html属性accept
添加接受的类型
您可以使用FileReader
,允许您读取存储在用户计算机上的文件内容(异步)。将其作为一个单独的函数使用,可以使用FileReader
方法提取Base64
获取表单数据:
const formData = new FormData();
formData.append('file', file);
const progressPercentage = Math.round(progressEvent.loaded / progressEvent.total * 100);
那么您的axios
看起来就像这样
axios({
method: 'post',
headers: {
'Content-Type': 'multipart/form-data',
},
data: dataForm,
url: 'urlhere',
onUploadProgress: (ev: ProgressEvent) => {
//Uploading progress functionality here....
},
})
.then((resp) => {
fetchBase64(file, (uri: string) => {
//maybe set a useState here for the Image URI or upload status.
});
})
.catch((err) => console.error(err));
进度功能:
const formData = new FormData();
formData.append('file', file);
const progressPercentage = Math.round(progressEvent.loaded / progressEvent.total * 100);