React文件及头像上传

  • 文件上传

    React文件上传推荐使用ant-design的upload组件,它提供了多种样式给我们使用,还支持拖拽上传。文档示例很全,这里不多说明了。

    地址:https://ant.design/components/upload-cn/
    

    然后这里说一下我使用时碰到的问题:

    • 同时上传多个文件

      可以重写beforeUpload方法,将文件保存在fileList中,然后返回false,停止upload默认上传。

    • 点击下载附件

      upload组件提供多种展示已上传附件列表的样式,但对于图片等浏览器可以打开的文件,想点击下载,就需要使用a标签的download属性,指定属性值为文件名就好了。

    • 附件名

      由于附件名会重复,所以在后端会重命名一个随机字符串。但我们的附件下载是直接请求附件服务器,不走后端。这样就存在下载下来的附件名是乱码的问题,这时我们就可以使用上面说的download属性对下载下来的附件重命名。

      但如果前端地址和附件服务器不在同一个域下,就会出现跨域问题,为了安全浏览器在跨域请求时是不支持a标签的download属性的。我的解决办法是后端存储时不对文件重命名,而是每次都新建一个文件夹,文件夹名字是随机字符串,里面只存一个附件。这样虽然很笨,但目前也就想到这个解决办法。

  • 头像上传

    头像上传基础的上传组件依然使用upload组件,然后图片裁剪使用React-avatar-editor,样式我是参照知乎的调整的。

    地址:https://github.com/mosch/react-avatar-editor
    

    直接上代码:

    <AvatarEditor
       ref={this.setEditorRef}
       image={this.state.originImg}
       width={200}
       height={200}
       border={50}
       color={[248, 249, 250, 0.8]}
       borderRadius={200}
       scale={parseFloat(this.state.scale)}
       style={{ cursor: 'move', margin: '10px 0' }}
    />
    <Slider
      onChange={this.handleScale}
      min={1}
      max={2}
      step={0.01}
      value={this.state.scale}
      style={{ width: 280, margin: '10px auto' }}
    />

    通过upload获取的base64编码的图片,可以直接传给AvatarEditor的image属性。然后AvatarEditor提供了多种调整图片的接口,具体看github文档吧,都有例子。调整后使用editor参数拿到调整后的base64编码上传。

    我只使用ant-design的Slider实现了个调整大小的功能。至于外部框体可以使用ant-design的Modal实现。

    这里写图片描述

    最后补充一下,如何限制只能选到图片格式的文件。可以设置upload的accept属性为image/*。其他格式看这里:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值