reactjs - 使用 react-dropzone 的文件上传进度
问题描述
使用 react-dropzone 上传文件,我想以文件传输百分比或 mbs 数据传输来实现文件进度。
这是链接:https ://react-dropzone.netlify.com/
onDrop(acceptedFiles, uploadApi) {
const filesToBeSent = this.state.filesToBeSent;
if (acceptedFiles.length) {
if (acceptedFiles[0].type === FileTypeList.TYPE) {
filesToBeSent.push(acceptedFiles);
const formData = new FormData();
formData.append("file", acceptedFiles[0]);
uploadApi(formData).then((response) => {
this.setState({
filesPreview: [],
filesToBeSent: [{}],
showNotification: true,
uploadResponse: response,
});
this.props.fetchHistory();
});
} else {
this.setState({
fileType: true,
});
}
} else {
this.setState({
fileSize: true,
});
}
}
<Dropzone maxSize={this.props.maxSize} onDrop={(files) => this.onDrop(files, this.props.uploadApi)}>
{({ getRootProps, getInputProps }) => {
return (
<div {...getRootProps()} className={"dropzone"}>
<UploadPanel id="uploadFileContainerId">
<p>
<img id="uploadImage" src={UploadImage} />
</p>
<input {...getInputProps()} />
<div>{t("assets:UPLOAD_FILE")}</div>
<Note>
{this.props.maxSizeTitle ? t("workers:UPLOAD_WORKER_FILE_SIZE") : t("assets:UPLOAD_FILE_SIZE")}
</Note>
</UploadPanel>
</div>
);
}}
</Dropzone>
解决方案
您可以使用React Dropzone Uploader,它为您提供开箱即用的上传进度的文件预览,并为您处理上传。
import 'react-dropzone-uploader/dist/styles.css'
import Dropzone from 'react-dropzone-uploader'
const Uploader = () => {
return (
<Dropzone
getUploadParams={() => ({ url: 'https://httpbin.org/post' })} // specify upload params and url for your files
onChangeStatus={({ meta, file }, status) => { console.log(status, meta, file) }}
onSubmit={(files) => { console.log(files.map(f => f.meta)) }}
accept="image/*,audio/*,video/*"
/>
)
}
可以取消或重新启动上传。UI 是完全可定制的。
完全披露:我编写这个库是为了解决React Dropzone所需的一些缺点和过多的样板。
推荐阅读
- file - 使用 Julia 语言处理文件
- python - 有没有一种很好的方法来测试文件的部分写入失败?
- java - 有没有像 Iterator 这样的东西,但有像 Streams 这样的功能?
- azure - Azure Function 插槽已预热,但仍遇到冷启动
- javascript - 错误:轴 #0 的数据列不能是字符串类型
- json - 比较 Firebase 实时数据库规则的子值 (.val) 时,比较的范围有多大?
- python - PyQt5 insertPlainText 来自另一个类 Python 3.8
- sql - 当一个值出现多次时选择行
- php - Composer 安装 Yii2 PHP
- python - 非常基本的 pyqt5 对话框应用程序退出并退出代码 -1073740791