最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue上傳文件formData上傳的解決全流程

 更新時間:2022年06月02日 09:17:10   作者:大明湖畔寫代碼  
這篇文章主要介紹了vue上傳文件formData上傳的解決全流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue上傳文件formData上傳解決

axios實例的配置關鍵配置

FormData 上傳文件類型有變項目中封裝的公共方法需要更改頭部請求信息設置為設為 “multipart/form-data”

整體流程解決跨域上傳文件跨域上傳FormData格式等問題

vue中Dom結構

<input type=“file” @change=“handleUpload” />

上傳圖片更改傳遞到接口事件

const handleUpload = (e) => {
const service = axios.create({
baseURL: ‘/api',
withCredentials: true // cors跨域要讓后臺設置cors跨域需后臺設配合
})
const params = new FormData() // 聲明formData數據類型
params.append(‘file', event.target.files[0])
params.append(‘tp', ‘partImg')
service
.post(‘UploadFiles/UploadImg', params, {
headers: {
‘Content-Type': ‘multipart/form-data'// 修改請求頭
}
})
.then(res => {
// console.log(‘提交成功');
})
}

handleUpload需要在vue3項目中return

baseURL設置為api vue項目中創(chuàng)建vue.config文件并寫入proxy跨域代理vue2和vue3都支持

vue 批量上傳文件

業(yè)務背景:一次性批量上傳多個文件,只請求一次接口,則手動提交到后臺

簡單說明一個實現思路

  • 前端vue統(tǒng)一處理多個文件保存到formData對象中,請求后臺接口
  • 后臺接口使用HttpServletRequest 進行接收,可轉化成MultipartHttpServletRequest對象接收前端formData對象
//前端使用的UI組件是Ant Design of Vue的upload組件
<template>
  <div class="clearfix">
    <a-upload
      :multiple="true"
      :before-upload="beforeUpload"
      :list-type="listType"
      :file-list="fileList"
      @preview="handlePreview"
      @change="handleChange"
      @download="handleDownload"
    >
      <div v-if="isMore">
        <a-icon type="plus" />
        <div class="ant-upload-text">文件上傳</div>
      </div>
      <div v-if="!isMore && fileList.length < 1">
        <a-icon type="plus" />
        <div class="ant-upload-text">文件上傳</div>
      </div>
    </a-upload>
    <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
      <img alt="example" style="width: 100%" :src="previewImage" />
    </a-modal>
  </div>
</template>

JS的核心代碼:

handleUpload() {
? ? ? const { fileList } = this
? ? ? if (fileList.length > 0) {
? ? ? ? var notUploaded = []
? ? ? ? var uploaded = []
? ? ? ? fileList.forEach((item) => {
? ? ? ? ? if (item.status && item.status === 'done') {
? ? ? ? ? ? uploaded.push(item.url)
? ? ? ? ? } else {
? ? ? ? ? ? notUploaded.push(item)
? ? ? ? ? }
? ? ? ? })
? ? ? ? let formData = new FormData()
? ? ? ? notUploaded.forEach((file, index) => {
? ? ? ? ? //所有文件保存在formData中
? ? ? ? ? formData.append(`file${index}`, file.originFileObj)
? ? ? ? })
? ? ? ? console.log('formData', JSON.stringify(formData))
? ? ? ? //請求批量上傳接口
? ? ? ? batchUploadFile(formData, this.targetS).then((res) => {
? ? ? ? ? if (res.success) {
? ? ? ? ? ? console.log('res', JSON.stringify(res))
? ? ? ? ? } else {
? ? ? ? ? ? this.$message.error('圖片上傳失敗,請重新上傳')
? ? ? ? ? }
? ? ? ? })
? ? ? ? // return
? ? ? ? //this.$emit('loadImgUrl', this.loadImgUrl.join(','))
? ? ? ? //this.fileList = []
? ? ? } else {
? ? ? ? // 如果沒有圖片則返回空
? ? ? ? //this.$emit('loadImgUrl', '')
? ? ? ? //this.fileList = []
? ? ? }
? ? },

后臺代碼:

? ? @ApiOperation(value = "批量文件上傳(最多同時上傳5個文件)", notes = "批量文件上傳")
? ? @PostMapping("/batchUploadFile/{filePath}")
? ? public Result<?> batchUploadFile(@ApiParam(value = "自定義上傳文件的路徑")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@PathVariable("filePath") String filePath,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?HttpServletRequest request) throws Exception {
? ? ? ? MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
? ? ? ? Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
? ? ? ? if (fileMap.isEmpty()) {
? ? ? ? ? ? return Result.error("上傳文件不能為空");
? ? ? ? }
? ? ? ? if (fileMap.size() > 5) {
? ? ? ? ? ? return Result.error("批量上傳文件數量不能超過5個文件");
? ? ? ? }
? ? ? ? List<Map<String, Object>> mapList = ftpUtils.batchUploadFile(fileMap, filePath);
? ? ? ? return Result.OK(mapList);
? ? }

注意:以上代碼部分功能不完全只能作為參考,重點是實現思路

1.前端是如何組裝參數

let formData = new FormData()
? ? ? ? notUploaded.forEach((file, index) => {
? ? ? ? ? //所有文件保存在formData中
? ? ? ? ? formData.append(`file${index}`, file.originFileObj) //核心代碼
? ? ? ? })

2.后臺使用MultipartHttpServletRequest對象進行接受

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
? ? ? ? Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();

前端參數格式:

請求結果:

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • vue?v-for中key的原理詳析

    vue?v-for中key的原理詳析

    key屬性可以用來提升v-for渲染的效率,vue中使用v-for渲染數據的時候,并不會去改變原有的元素和數據,下面這篇文章主要給大家介紹了關于vue?v-for中key原理的相關資料,需要的朋友可以參考下
    2022-04-04
  • Vue項目中如何引入本地第三方JS庫

    Vue項目中如何引入本地第三方JS庫

    vue中常遇到第三方js,這篇文章主要給大家介紹了關于Vue項目中如何引入本地第三方JS庫的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • vue的過濾器filter實例詳解

    vue的過濾器filter實例詳解

    本文通過實例代碼給大家介紹了vue的過濾器filter的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Vue子組件監(jiān)聽父組件值的變化

    Vue子組件監(jiān)聽父組件值的變化

    這篇文章主要介紹了Vue子組件監(jiān)聽父組件值的變化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue-cli 組件的導入與使用教程詳解

    vue-cli 組件的導入與使用教程詳解

    這篇文章主要介紹了vue-cli--組件的導入與使用詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • Vue中使用setTimeout問題

    Vue中使用setTimeout問題

    這篇文章主要介紹了Vue中使用setTimeout問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue框架下部署上線后刷新報404問題的解決方案(推薦)

    vue框架下部署上線后刷新報404問題的解決方案(推薦)

    這篇文章主要介紹了vue框架下部署上線后刷新報404問題解決方案,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue element input如何讓瀏覽器不保存密碼

    vue element input如何讓瀏覽器不保存密碼

    這篇文章主要介紹了vue element input如何讓瀏覽器不保存密碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue項目中實現圖片預覽的公用組件功能

    vue項目中實現圖片預覽的公用組件功能

    小編接到查看影像的功能需求,根據需求,多個組件需要用到查看影像的功能,所以考慮做一個公用組件,通過組件傳值的方法將查看影像文件的入參傳過去。下面小編通過實例代碼給大家分享vue項目中實現圖片預覽的公用組件功能,需要的朋友參考下吧
    2018-10-10
  • Vue可自定義tab組件用法實例

    Vue可自定義tab組件用法實例

    在本篇文章里小編給大家分享了關于Vue可自定義tab組件用法實例以及相關知識點,需要的朋友們參考下。
    2019-10-10

最新評論

开化县| 城固县| 昌都县| 温宿县| 廉江市| 行唐县| 加查县| 桓仁| 潜山县| 永德县| 清水河县| 淳安县| 南昌县| 杭州市| 汽车| 渭源县| 古丈县| 壤塘县| 清流县| 镇赉县| 莎车县| 金昌市| 托里县| 乌拉特前旗| 喀喇| 临沂市| 三河市| 册亨县| 海丰县| 车险| 自贡市| 昆明市| 枞阳县| 湘西| 通道| 策勒县| 柘城县| 类乌齐县| 姚安县| 阜新| 罗平县|