javascript - React DropzoneComponent 在上传之前在本地打开/修改文件

标签 javascript reactjs filereader dropzone.js react-dropzone

我正在使用基于 DropzoneComponent(Dropzone 的包装器)构建的自定义 uploader 构建应用程序。在将文件上传到服务器之前,我想打开并更改文件,但我发现无法使用 FileReader 打开文件。

在代码中找到 2 条评论,其中部分失败。

"dependencies": {
    "filereader": "^0.10.3",
    "js-cookie": "^2.1.4",
    "react": "^16.2.0",
    "react-dropzone-component": "^3.1.2",
}

例子:

import React from 'react';
import DropzoneComponent from 'react-dropzone-component';
import * as Cookies from "js-cookie";
import FileReader from "filereader";
export default class CustomUploader extends React.Component {
    constructor(props) {
        let headers = {
              'X-CSRFToken': Cookies.get('csrf_token'),
        };
        this.config = {
            iconFiletypes: ['.data'],
            showFiletypeIcon: true,
            postUrl: '/upload',
        };
        this.djsConfig = {
            headers:headers,
            autoProcessQueue: true,
            autoQueue: true,
            previewTemplate: ReactDOMServer.renderToStaticMarkup(
            <div className="col-3 dz-preview dz-file-preview">
              <div className="dz-details">
                <img className="dz-preview-image" data-dz-thumbnail="true" />
              </div>
            </div>
          ),
        };
        this.eventHandlers = {
            addedfile: (file) => {
                // THIS GETS CALLED PROPERLY but the provided does
                // not seem to be loadable by FileReader :-(
                const reader = new FileReader();
                reader.onloadend = function (e) {
                    console.log(e.target.result);
                };
                reader.onerror = function (e) {
                    console.log(e.target.error);
                };
                // THIS IS WHERE IT FAILS, "file" object obviously
                // misses "path" attribute for some reason and reader 
                // cannot open it, do you have any idea how/where to 
                // access local path or how to open and modify the file?
                reader.readAsArrayBuffer(file);
            },
        };
    };
    render() {
        return (
            <div className="dz-wrapper">
                <DropzoneComponent config={this.config}
                           eventHandlers={this.eventHandlers}
                           djsConfig={this.djsConfig}
                          className="row">
                </DropzoneComponent>
            </div>
        );
     }
};

我按照教程如何执行此操作,但似乎 Dropzone 中的文件对象由于某种原因具有不同的结构,不再与 FileReader 兼容,可能是版本问题??

最佳答案

所以在谷歌搜索了 2 天后,我在周末找到了自己。使用 new window.FileReader() 而不是 new FileReader() 可以毫无问题地加载文件。仍然不确定为什么,但是嘿它有效¯_(ツ)_/¯

关于javascript - React DropzoneComponent 在上传之前在本地打开/修改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674332/

相关文章:

javascript - 为什么我的循环条件无法通过将变量与其自身进行比较来实现?

javascript - 如何按一定时间间隔一次显示数组中的一个类?

javascript - 尝试测试异步操作时出现 `TypeError: store.dispatch(...).then is not a function`

javascript - jQueryeach + FileReader 不返回正确的值

javascript - 实现原型(prototype)方法

javascript - Javascript 中哪个运算符检查 2 个值是否等于 0 最快?

javascript - ReactJs 中定义组件的两种方式之间的区别

javascript - mobx @inject 不创建新的(装饰的)组件

javascript - 对于 .ttf、.woff 和 .woff2 等字体文件,FileReader.readAsDataURL() 读取器结果为空

javascript - 是否可以剪切部分视频并仅使用 html5 和 js 将其上传到服务器