<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      FormData傳輸JSON同時上傳單個/多個文件問題

      背景

      最近在開發一個功能時,涉及到向后端接口發送:

      • JSON請求參數
      • 多個文件
        剛開始想通過RequestBody(application/json)形式進行傳值,但是文件不好處理。有一個通過application/json傳輸文件數據的方法,就是將文件轉成base64,然后在后端進行處理。但是這種方式涉及到大文件傳輸的時候,轉成base64會消耗過多成本

      于是找來找去找到按form表單的形式提交請求參數(按理來說本該如此),但是如何傳輸json數據倒變成了一個問題,直到找到這么一個文檔,參考之后解決了目前的問題。
      https://springdoc.cn/spring-file-upload-json/

      解決歷程

      1. 后端接口:
          @PostMapping("/creation")
          public void testFormData(@RequestPart("files") MultipartFile[] files,
                                       @RequestPart("dto") Dto dto
          ) {
              System.out.println("hello a shuge");
      
              String jsonStr = JSONUtil.toJsonStr(dto);
              System.out.println(jsonStr);
      
              for (MultipartFile file : files) {
                  System.out.println(file.getOriginalFilename());
                  System.out.println(file.getName());
              }
      
          }
      

      注意到,上面testFormData方法中的請求參數 使用的注解 是:@RequestPart

      1. 前端請求
      function handleFileUpload(event) {
      // 在這里構造上傳要用的fileList
          const files = event.target.files;
          if (files) {
              for (let i = 0; i < files.length; i++) {
                  if (fileList.length < 20 && files[i].type.includes('image')) {
                      fileList.push(URL.createObjectURL(files[i]));
                  }
              }
          }
      }
      
      
          let formData = new FormData();
          let request = {}; // json數據
      // fileList是上面方法中fileList.push(URL.createObjectURL(files[i]));添加的元素
          for (let key in fileList) {
              formData.append('files', new Blob(fileList), 'files'); // 往formData中添加blob數據,這里涉及到append另外一個用法
          }
      
          // 注意下面:設置json數據時候,第三個參數指定此時set的數據是application/json類型
          formData.set('dto', new Blob([JSON.stringify(request)], { type: 'application/json' }));
      
          // 遍歷formData,打印到console
          for (var pair of formData.entries()) {
              console.log(pair[0] + ', ' + pair[1]);
          }
          UploaderApi.publishProduct(formData)
              .then((res) => {
                  if (res.success) {
                     console.log("success");
                  } else {
                     console.log("failed");
                  }
              })
              .catch((err) => {
                 console.log("error");
              });
      
      
      http.interceptors.request.use(
          (config) => {
              // 在發送請求之前做些什么
              if (config.method === 'post') {
                  // 這里處理上傳文件的請求
                  if (config.headers['Content-Type'] === 'multipart/form-data') {
                      const formData = new FormData();
                      // 構造新的formData(如果不需要添加reqId/stamp)那這步就可以省略了,直接config.data=formData就行
                      for (var pair of config.data.entries()) {
                          formData.append(pair[0], pair[1]);
                      }
                      formData.append('requestId', reqId);
                      formData.append('stamp', RequestUtil.generateTimestamp());
                      config.data = formData;
                  } else {
                      config.headers['Content-Type'] = 'application/json;charset=utf-8';
                      config.data = {
                          ...config.data,
                          requestId: reqId,
                          stamp: RequestUtil.generateTimestamp(),
                      };
                  }
              }
              return config;
          },
          (error) => {
              // 對請求錯誤做些什么
              return Promise.reject(error);
          },
      );
      
      

      請求參數實例

      以上,就可以通過axios請求后端接口傳輸 json字符串+多文件

      注意

      涉及到的內容

      • SpringBoot中@RequestPart的用法
      • 前端FomrData.append與set的區別
      • 通過將requestBody以contentType=application/json形式寫入formData中(里面其實是blob類型數據)
      posted @ 2024-04-24 09:55  你啊347  閱讀(1415)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品国产亚洲av麻豆长发| 色综合激情丁香七月色综合| 久热这里有精品视频播放| 国偷自产一区二区三区在线视频| 精品国产国语对白主播野战| 亚洲国产成人无码影院| 日本丰满老妇bbb| 亚洲精品成人区在线观看| 高潮潮喷奶水飞溅视频无码| 日韩精品福利一二三专区| 国产999久久高清免费观看| 国产精品无码一区二区桃花视频| 国产精品天天看天天狠| 日韩精品国产另类专区| 非会员区试看120秒6次| 亚洲精品综合一区二区三区在线| 男女爽爽无遮挡午夜视频| 中文在线最新版天堂| 精品国产这么小也不放过| 国产欧美日韩va另类在线播放| 乱色老熟妇一区二区三区| 国产在线午夜不卡精品影院| 久久久久久综合网天天| 午夜福利理论片高清在线| 国产在线观看码高清视频| 欧美日产国产精品| 9999国产精品欧美久久久久久| 国产成人99亚洲综合精品| 深夜精品免费在线观看| 野外做受三级视频| 国产精品一区二区日韩精品| 国产精品久久久久精品日日| 精品视频福利| 国产日韩欧美| 亚洲第一综合天堂另类专| 亚洲婷婷综合色高清在线 | 99久久精品国产一区色| 国产成人无码专区| 国产热A欧美热A在线视频| 国产成人无码| 国产亚洲精品国产福APP|