【问题标题】:Reactjs Input Upload doesn't return local URLReactjs 输入上传不返回本地 URL
【发布时间】:2020-04-10 08:07:45
【问题描述】:

在将图像上传到服务器之前尝试显示图像预览时遇到问题。我正在使用 reactjs。

我的问题是,当我尝试上传图片时,我得到了文件数据,但是当我使用阅读器时,它不返回本地 URL,只显示 undefined

这是我尝试关注的话题get-image-preview-before-uploading-in-react

但是当我尝试检查我的图片本地网址时,它返回undefined

这是我在文件中导入的内容:

import React, {Component} from "react";
import { MDBContainer, MDBRow, MDBCol, MDBBtn, MDBIcon, MDBInput, MDBDropdown, MDBDropdownToggle, MDBDropdownMenu, MDBDropdownItem  } from 'mdbreact';

这是我的 js:

<p className="text-upload">Front Desain</p>
<input ref="file" type="file" name="front Design" onChange={this.frontDesign}/>

这是我的方法或功能:

  frontDesign = (e) =>{
    var file = this.refs.file.files[0];
    var reader = new FileReader();
    var url = reader.readAsDataURL(file);

    reader.onloadend = function (e) {
        this.setState({
          form:{
            frontDesign: [reader.result]
          }
        })
      }.bind(this);
    console.log("Check Data : ", file)
    console.log("Check URL : ", url)

  }

这是我的状态:

  state ={
    form:{
      frontDesign: [],
    }
  }

这是我的控制台:

这是我的密码箱:

https://codesandbox.io/s/tender-mclaren-zb1l7?fontsize=14

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript reactjs mdbreact


    【解决方案1】:

    From the mozilla website 接缝你需要为你的阅读器添加一个加载事件监听器。部分版本的 IE 不支持此示例代码。

    ...
    
    reader.addEventListener("load", () => {
      this.setState(state => ({
        ...state,
        form:{
          frontDesign: [reader.result]
        }
      }))
      const url = reader.result;
      console.log(url);
    }, false);
    
    ...
    

    在这里工作 condeSanbox:https://codesandbox.io/s/affectionate-lamport-dnbij

    【讨论】:

    • 谢谢你的回答,我尝试使用这种方法但是当我使用console.log("Check URL : ", url) 来检查它时,它仍然返回未定义
    • 对于fileReader,我一直都是这样用的,但其实我真的不知道怎么用别的方法上传这个文件
    • 这很奇怪,你能添加一个 CodeSandbox 链接吗?它可能是 react ref 尝试将输入的 id 传递给你的 onChange 方法并使用 document.getElementById 或使用 @Cong anwser
    • 我尝试了@Cong 的答案,但它返回另一个错误,等等我会尝试做一些尝试
    • @RakisFriski,我认为您可能需要向您的阅读器添加加载事件侦听器。请创建一个更容易提供帮助的代码框。
    【解决方案2】:

    这里不需要使用 ref。试试下面的代码

    frontDesign = (e) => {
      var file = e.target.files[0];
      var reader = new FileReader();
      reader.onload = (e) => {
        //Image URL e.target.result
        this.setState({
          form:{
            frontDesign: [e.target.result]
          }
        })
      }
      reader.readAsDataURL(file);
    }
    

    【讨论】:

    • 谢谢你的回答,但是当我尝试使用它时,我收到另一个错误,上面写着`无法在'FileReader'上执行'readAsDataURL':对象已经忙于读取Blob。`
    猜你喜欢
    • 2013-10-31
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多