JavaScript通过 new FileReader() 获取图片base64 无组件上传图片

简介: JavaScript通过 new FileReader() 获取图片base64 无组件上传图片

我们知道,img的src属性或background的url属性,可以通过被赋值为图片网络地址或base64的方式显示图片。
在文件上传中,我们一般会先将本地文件上传到服务器,上传成功后,由后台返回图片的网络地址再在前端显示。
通过FileReader的readAsDataURL方法,我们可以不经过后台,直接将本地图片显示在页面上。这样做可以减少前后端频繁的交互过程,减少服务器端无用的图片资源,代码如下

data(){
    return{
         iconFileSrc: null, // 展示再页面上的图片路径
        editFormData: {
            iconFile: null // 传给后台的图片路径
        }
     }
    }
      <Card title="图片素材" class="mt10">
          <FormItem label="应用图标" prop="iconFile">
            <div v-if="iconFileSrc" class="upload-icon">
              <img height="100%" :src="iconFileSrc">
            </div>
            <Upload
              name="iconFile"  // 上传的文件字段名
              type="drag" // 上传控件的类型,可选值为 select(点击选择),drag(支持拖拽)
              v-model="editFormData.iconFile"
              style="display:inline-block;width:58px;"
              :max-size="200" // 文件大小限制,单位 kb
              accept=".png" //接受上传的文件类型
              :format="['png']" //支持的文件类型,与 accept 不同的是,format 是识别文件的后缀名,accept 为 input 标签原生的 accept 属性,会在选择文件时过滤,可以两者结合使用
              :before-upload="iconFileBeforeUpload" // 上传文件之前的钩子,参数为上传的文件,若返回 false 或者 Promise 则停止上传
              action="//"  // 上传的地址,必填
            >
              <div v-if="!editFormData.iconFile" style="width: 58px;height:58px;line-height:  58px;">
                <Icon
                  type="md-add"
                  size="20"
                ></Icon>
              </div>
              <span v-else class="cp">更换</span>
            </Upload>
            <div class="tips">请上传200K以内的PNG格式图片,尺寸为512X512</div>
          </FormItem>
        </Card>
  // 应用图标上传前
    iconFileBeforeUpload (file) {
      console.log(file)
      if (file.type !== 'image/png') {
        return this.$Notice.warning({
          title: '上传格式错误',
          desc: '上传200K以内的PNG格式图片,尺寸为512X512'
        })
      }
      if (file.size > 204800) {
        return this.$Notice.warning({
          title: '文件超出限制大小',
          desc: '上传200K以内的PNG格式图片,尺寸为512X512'
        })
      }
      this.editFormData.iconFile = file
      // 展示的时候 使用base64进行展示  传入数据库的时候 还是使用原始的file 并进行forData转化
      const reader = new FileReader()
      reader.readAsDataURL(file) // 读出 base64
      reader.onload = () => {
        // 图片的 base64 格式, 可以直接当成 img 的 src 属性值
        const _base64 = reader.result
        this.iconFileSrc = _base64
      }
      return false
    },

对于图片上传,我们也可以先将图片转换为base64进行传输,此时由于传输的图片内容就是一段字符串,故上传接口可以当做普通post接口处理,当图片传输到后台后,可以在转换为文件实体存储。
当然,考虑到base64转换效率及其本身的大小,本方法还是适合于上传内容简单或所占内存较小的文件。

相关文章
|
3月前
|
存储 JavaScript 前端开发
JS上传文件(base64字符串和二进制文件流)
这篇文章介绍了两种JavaScript文件上传的方法:使用FileReader对象将文件读取为base64字符串上传,以及使用FormData对象以二进制文件流的形式上传文件,包括如何处理文件选择、读取和上传的详细代码示例。
479 2
JS上传文件(base64字符串和二进制文件流)
|
2月前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
3月前
|
前端开发 JavaScript API
使用 JavaScript 实现图片上传
使用 JavaScript 实现图片上传
123 1
|
3月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
156 0
|
20天前
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
1月前
|
JavaScript 前端开发 API
探索Vue.js 3的组合式API:一种更灵活的组件状态管理方式
【10月更文挑战第5天】探索Vue.js 3的组合式API:一种更灵活的组件状态管理方式
|
2月前
|
Web App开发 JavaScript 前端开发
用 JavaScript 创建 XPCOM 组件
用 JavaScript 创建 XPCOM 组件
|
2月前
|
JavaScript 前端开发
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
|
3月前
|
JavaScript 前端开发 测试技术
[译]: Vue.js 函数式组件:what, why & when?
[译]: Vue.js 函数式组件:what, why & when?
[译]: Vue.js 函数式组件:what, why & when?
|
3月前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
154 0