9行代码实现图片上传和预览(自定义按钮上传)

Posted 前端呆头鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9行代码实现图片上传和预览(自定义按钮上传)相关的知识,希望对你有一定的参考价值。

9行代码实现图片上传和预览(自定义按钮上传)

结果展示:

  1. 默认展示

    2.点击按钮后,选择图片文件
  2. 图片预览

首先我们定义一个type为file的input,并将它隐藏,绘制一个button,在按钮点击事件中触发input的点击事件。

<input
id="file-upload"
type="file"
accept="image/*"
name="picture"
style="display: none"
/>

<button @click="getFile">
  上传头像
</button>
const getFile = () => 
  document.getElementById('file-upload').click()

现在点击按钮,我们可以看到文件选择框了。

接下来在input上添加change事件,在event中取到file对象,实现预览和上传。

<input
...
@Change="preview"
/>
let imgUrl = ref('')
let imgFile = ref(null)
const preview = (e) => 
  imgUrl.value = window.URL.createObjectURL(e.target.files[0])
  imgFile = e.target.files[0]

window.URL.createObjectURL函数可以创建一个file文件的访问url,url用法和普通url相同,根据此url可以实现图片预览,我们可以将该url赋给img标签。

<img v-if="imgUrl" class="img" :src="imgUrl" alt="" />

而file文件可以提交给服务端储存。

下面给出我的完整代码。

<template>
  <div class="flex">
     <div class="img-bar">
        <img v-if="imgUrl" class="img" :src="imgUrl" alt="" />
        <div v-else class="flex img">
           <i class="iconfont icon-drag icon-Quit" />
         </div>
         <input
            id="file-upload"
            class="file-upload img"
            type="file"
            accept="image/*"
            name="picture"
            style="display: none"
            @Change="preview"
          />
        </div>
        <button class="btn-primary plain hand" @click="getFile">
          <i class="iconfont icon-drag icon-Quit" />上传头像
        </button>
      </div>
</template>
<script lang="ts" setup>
let  imgUrl, imgFile, getFile, preview  = (() => 
  let imgUrl = ref('')
  let imgFile = ref(null)
  const getFile = () => 
    document.getElementById('file-upload').click()
  
  const preview = (e) => 
    imgUrl.value = window.URL.createObjectURL(e.target.files[0])
    imgFile = e.target.files[0]
  
  return  imgUrl, imgFile, getFile, preview 
)()
</script>
<style lang="scss" scoped>
...
</style>

以上是关于9行代码实现图片上传和预览(自定义按钮上传)的主要内容,如果未能解决你的问题,请参考以下文章

web 图片上传实现本地预览

web 图片上传实现本地预览

ckeditor添加自定义按钮整合swfupload实现批量上传图片

html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题

Vue结合element ui 实现图片上传可预览,可删除,以base64字符串上传到服务器

图片选择,预览及上传