【问题标题】:TypeError: Failed to execute 'createObjectURL' on 'URL': Overload resolution failedTypeError:无法在“URL”上执行“createObjectURL”:重载解析失败
【发布时间】:2021-07-02 09:12:46
【问题描述】:

我正在尝试在我的 React 应用程序中使用文件上传功能,但遇到了问题。当我尝试上传第一张图片时,它工作得很好。文件资源管理器对话框关闭并显示我的图片。用我的文件资源管理器中的另一张图片覆盖图片也可以。

但是,当我在覆盖时取消文件浏览器,我收到以下错误:

TypeError:无法在“URL”上执行“createObjectURL”:重载解析失败。

这是我的相关代码:

showImage = (e) =>{
    this.setState({image: URL.createObjectURL(e.target.files[0])})
  }

render() {
    return (
 <div className="content">
        <input
          accept="image/*"
          className="input"
          id="icon-button-file"
          type="file"
          onChange={this.showImage}
        />
        <label htmlFor="icon-button-file">
       
          <IconButton
            className="image"
            aria-label="upload picture"
            component="span"
          >
             { this.state.image == null ? <AddAPhotoIcon className="icon" /> : 
             <img src={this.state.image} alt="test" className="picture"/> }
             </IconButton>
        </label>
</div>
)

【问题讨论】:

    标签: javascript html reactjs image createobjecturl


    【解决方案1】:

    我认为错误意味着文件数组可能为空。您可能想在访问成员之前检查数组是否为空。

    if(e.target.files.length !== 0){
          this.setState({image: URL.createObjectURL(e.target.files[0])})
        }
    

    【讨论】:

      【解决方案2】:
       dataURLToBlob(dataurl) {
              let arr = dataurl.split(',');
              let mime = arr[0].match(/:(.*?);/)[1];
              let bstr = atob(arr[1]);
              let n = bstr.length;
              let u8arr = new Uint8Array(n);
              while (n--) {
                  u8arr[n] = bstr.charCodeAt(n);
              }
              return new Blob([u8arr], { type: mime });
          },
       showImage = (e) =>{
         this.setState({image: URL.createObjectURL(dataURLToBlob(e.target.files[0]))})
      }
      

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2021-04-08
      • 2019-10-13
      • 2019-01-07
      • 2015-01-23
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多