【问题标题】:react-dropzone convert uploaded file to a byte arrayreact-dropzone 将上传的文件转换为字节数组
【发布时间】:2020-05-25 12:42:21
【问题描述】:

我有以下代码,我想把上传的文件作为字节数组传递给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)

将上传的文件作为字节数组获取的最佳方法是什么?

【问题讨论】:

    标签: reactjs file-upload react-dropzone


    【解决方案1】:

    您需要使用FileReaderreadAsArrayBuffer 将文件对象转换为字节数组

    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]);
    }
    

    【讨论】:

    • 谢谢!!!我在 reader.result Overload 1 of 5 上收到编译时错误,'(elements: Iterable): Uint8Array',给出了以下错误。 'string | 类型的参数数组缓冲区 | null' 不能分配给“Iterable”类型的参数。类型“null”不可分配给类型“Iterable”。重载 2 of 5,“(长度:数字):Uint8Array”,给出了以下错误。 'string | 类型的参数数组缓冲区 | null' 不能分配给“数字”类型的参数。重载 3 of 5, '(arrayOrArrayBuffer: ArrayBuffer
    • 你可以试试上面代码中的new Uint8Array(reader.result as ArrayBuffer)
    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 2014-04-14
    • 2015-09-16
    • 1970-01-01
    • 2017-10-07
    • 2017-04-14
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多