图片上传vue --file

一、初识multipart/form-data

enctype属性:

enctype:规定了form表单在发送到服务器时候编码方式,它有如下的三个值。

application/x-www-form-urlencoded:默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。

multipart/form-data:指定传输数据为二进制类型,比如图片、mp3、文件。

text/plain:纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

Vue使用el-upload文件(图片)上传

1.一般的整体流程就是:咱们选择一个文件点击确定上传后,会上传到服务器(action),这时候服务器会返回给我们一个url(在on-success回调中可以拿到),接下来就是在提交表单的时候将该url传给后端就可以了。

2.他们会直接存图片,也就是存图片的二进制对象base64编码,然后返回的时候是url地址 。这时候我们就用不到上面的action了,需要用到on-change事件,拿到我们上传图片的blob对象,并传给后端 。

一 调用action

<el-form-item label="视频上传" prop="" :rules="[]">
  <el-upload
    class="upload-demo"
    :action="`${this.$http.BASE_URL}/sys/file/webupload/upload?uploadPath=/iot/labor/labourSafeTrain`"
    :on-success="uploadSuccess"
    :before-upload="beforeAvatarUpload"
    :show-file-list="true"
    :limit='1'
    :file-list="videofileList"
  >
    <el-button size="small" type="primary">点击上传</el-button>
    <!-- <div slot="tip" class="el-upload__tip">
      只允许导入“xls”或“xlsx”格式文件!
    </div> -->
  </el-upload>
</el-form-item>
// 上传之前的回调
beforeAvatarUpload(file) {
  const isLt50M = file.size / 1024 / 1024 < 50;
  //const isJPG = fileType === 'image/jpg' || fileType === 'image/jpeg' || fileType === 'image/png'
  if (['video/mp4', 'video/ogg','video/flv','video/avi','video/wmv','video/rmvb'].indexOf(file.type) == -1) {
    this.$message.error('上传视频只能是 mp4、ogg、flv、avi、wmv、rmvb 格式!');
    return false;
  }
  //if (!isJPG) {
  //  this.$message.error('上传图片的格式只能是 JPG或PNG 格式!')
  //  return false
  //}
  if (!isLt50M) {
    this.$message.error('上传视频大小不能超过 50MB!');
    return false;
  }
  return true;
},
// 上传成功的回调
uploadSuccess(obj,res,file) {
  if (obj.success) {
    this.$message.success({dangerouslyUseHTMLString: true,
      message: obj.msg})
    this.inputForm.url = obj.url // 后端返给我们的路径
  } else {
    this.$message.error('操作失败')
  }
},

二使用流上传

代码:

2.1 添加组件

<el-form-item label="实验室照片:" prop="photo">
                                <el-upload class="avatar-uploader" action="" :auto-upload="false" ref="upload" :show-file-list="false" accept="image/*" :on-change="imageChange">
                                    <img v-if="imgurl" :src="imgurl" class="avatar">
                                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                                </el-upload>
                                <div>支持jpg和png格式,小于2M,建议比例16:9</div>
 </el-form-item>

2.2 调用接口:

export function uploadFileToFast(params, config, cancelFun) {
  // 上传文件
  return request({
    url: '/file/uploadFileToFast',
    method: 'post',
    headers: {
      "Content-Type": "multipart/form-data",
      Authorization: getToken()
    },
    data: params,
    onUploadProgress: config,
    cancelToken:cancelFun
  })
}

2.3 前端 调用接口方法:

  imageChange: function (res, fileList) {
            debugger
            const file = fileList[fileList.length - 1].raw;
            const fileSize = file.size;
            let fileExtension = '';
            let fileName = '';
            if (file.name.lastIndexOf('.') > -1) {
                fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1);
                fileName = file.name.split('.')[0];
            }
            if (!fileSize) {
                this.$message.error('无效的文件,请重新选择!');
                return;
            }
            if (fileSize / 1024 / 1024 > 2) {
                this.$message.error('上传文件大小不能超过 2MB!');
                return;
            }
            if (fileExtension != 'jpg' && fileExtension != 'png' && fileExtension != 'jpeg') {
                this.$message.error('支持jpg和png格式!');
                return;
            }

            let params = new FormData();
            params.append('fileName', file);
            let that = this
            const reader = new FileReader() // 创建读取文件对象
            reader.readAsDataURL(file) // 发起异步请求,读取文件
            reader.onload = function () { // 文件读取完成后
                that.imgurl = reader.result
            }
            uploadFileToFast(params).then((res) => {
                console.log(res);
                this.form.photo = res;
                // this.msgSuccess("上传成功");
            }).catch((e) => {
            });
            this.$refs.upload.clearFiles();
        },

参考:

vue el-upload上传文件方法 详细解答 action 和 http-request两种方式_wwf1225的博客-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于vue-quill-editor的自定义上传图片,你可以按照以下步骤进行操作: 1. 首先,你需要在你的Vue项目中安装vue-quill-editor依赖包。可以使用npm或者yarn命令来安装: ```bash npm install vue-quill-editor # 或者 yarn add vue-quill-editor ``` 2. 在你需要使用vue-quill-editor的组件中引入依赖: ```vue <template> <div> <quill-editor v-model="content" :options="editorOptions" @image-added="handleImageAdded" ></quill-editor> </div> </template> <script> import { quillEditor } from 'vue-quill-editor' export default { components: { quillEditor }, data() { return { content: '', editorOptions: { // 这里可以配置其他选项 } } }, methods: { handleImageAdded(file) { // 自定义处理上传图片的逻辑 // 这里可以使用AJAX或其他方式将图片上传服务器,然后将返回的图片地址插入到编辑器中 } } } </script> ``` 在上述代码中,我们通过`@image-added`事件监听图片添加的事件,并触发`handleImageAdded`方法来处理上传图片的逻辑。 3. 实现`handleImageAdded`方法,根据你的需求自定义上传图片的逻辑。你可以使用AJAX或其他方式将图片上传服务器,并获取返回的图片地址。然后,你可以使用Quill提供的API将图片插入到编辑器中。下面是一个示例: ```javascript methods: { handleImageAdded(file) { const formData = new FormData() formData.append('image', file) // 发送AJAX请求将图片上传服务器 axios.post('/upload', formData) .then(response => { const imageUrl = response.data.imageUrl // 将图片地址插入到编辑器中 const range = this.$refs.editor.quill.getSelection() this.$refs.editor.quill.insertEmbed(range.index, 'image', imageUrl) }) .catch(error => { console.error('上传图片失败', error) }) } } ``` 在上述代码中,我们通过axios库发送了一个POST请求将图片上传服务器,并获取返回的图片地址。然后,我们使用Quill提供的`insertEmbed`方法将图片地址插入到编辑器中。 请注意,这只是一个示例,具体的上传图片逻辑可能因你的项目需求而有所不同。你需要根据自己的实际情况进行相应的修改。 希望以上信息能对你有所帮助!如果你还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值