react-dropzone 将上传的文件转换为字节数组
react-dropzone convert uploaded file to a byte array
我有以下代码,我想获取上传的文件并将其作为字节数组传递给 api,这可能吗?
interface IData{
file: Uint8Array
}
const [open, setOpen] = React.useState(false);
<div>
<Button variant="contained" color="primary" onClick={() => setOpen(true)}>
Add Data
</Button>
<DropzoneDialog
acceptedFiles={['image/*']}
cancelButtonText={"cancel"}
submitButtonText={"submit"}
maxFileSize={5000000}
open={open}
onClose={() => setOpen(false)}
onSave={(files) => {
let data = {} as IData;
data.file = files[0];
// Call api here... but
setOpen(false);
}}
showPreviews={true}
showFileNamesInPreview={true}
/>
但是在 data.file = files[0]
行我得到以下错误
Type 'File' is missing the following properties from type 'Uint8Array': BYTES_PER_ELEMENT, buffer, byteLength, byteOffset, and 25 more.ts(2740)
将上传的文件作为字节数组获取的最佳方法是什么?
您需要利用FileReader
with readAsArrayBuffer
将文件对象转换为字节数组
onSave={(files) => {
const reader = new FileReader();
reader.addEventListener('load', () => {
let data = {} as IData;
data.file = new Uint8Array(reader.result as ArrayBuffer);
// call api here
setOpen(false);
});
reader.readAsArrayBuffer(files[0]);
}
我有以下代码,我想获取上传的文件并将其作为字节数组传递给 api,这可能吗?
interface IData{
file: Uint8Array
}
const [open, setOpen] = React.useState(false);
<div>
<Button variant="contained" color="primary" onClick={() => setOpen(true)}>
Add Data
</Button>
<DropzoneDialog
acceptedFiles={['image/*']}
cancelButtonText={"cancel"}
submitButtonText={"submit"}
maxFileSize={5000000}
open={open}
onClose={() => setOpen(false)}
onSave={(files) => {
let data = {} as IData;
data.file = files[0];
// Call api here... but
setOpen(false);
}}
showPreviews={true}
showFileNamesInPreview={true}
/>
但是在 data.file = files[0]
行我得到以下错误
Type 'File' is missing the following properties from type 'Uint8Array': BYTES_PER_ELEMENT, buffer, byteLength, byteOffset, and 25 more.ts(2740)
将上传的文件作为字节数组获取的最佳方法是什么?
您需要利用FileReader
with readAsArrayBuffer
将文件对象转换为字节数组
onSave={(files) => {
const reader = new FileReader();
reader.addEventListener('load', () => {
let data = {} as IData;
data.file = new Uint8Array(reader.result as ArrayBuffer);
// call api here
setOpen(false);
});
reader.readAsArrayBuffer(files[0]);
}