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

前端發(fā)送文件后端的nest.js如何接收文件名詳解

 更新時間:2026年02月12日 08:30:32   作者:江啟年  
這篇文章主要介紹了前端發(fā)送文件后端的nest.js如何接收文件名的相關(guān)資料,包括使用FormData對象封裝文件,并通過append方法添加文件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

當(dāng)我們在前端發(fā)送文件的時候,首先把文件的數(shù)據(jù)整合起來,在業(yè)務(wù)層匯聚到接口層,接口層使用參數(shù)接收一個或多個文件:

export function useUploadFile() {
  return useMutation({
    mutationFn: async ({
      bucket,
      files,
    }: {
      bucket: string;
      files: File[];
    }) => {
      const formData = new FormData();
      files.forEach((file) => {
        formData.append('files', file, encodeURIComponent(file.name));
      });

      const res = await http.post<UploadFileApiResponse>(
        `${uploadFilePath}/${bucket}`,
        formData,
        {
          headers: {
            'Accept-Charset': 'utf-8',
          },
        }
      );
      return res;
    },
  });
}

在上面的代碼中,接收的是多個文件,使用File[]類型進行約束。

拿到文件后,先new一個FormData,用來發(fā)送文件,當(dāng)文件的發(fā)送“容器”。那么多個文件就需要把它們都放入“容器”里才行。使用forEach進行放入。

使用formdata的append函數(shù)即可添加。注意append函數(shù)的第一個參數(shù),那是文件的描述符號,可以隨便寫,當(dāng)然,開發(fā)過程中需要遵守開發(fā)標(biāo)準(zhǔn),后端接收的時候用什么描述符號,就填什么。

最關(guān)鍵的是第三個參數(shù),第三個參數(shù)是調(diào)用了encodeURIComponent函數(shù),這個函數(shù)會把字符轉(zhuǎn)換為URL-encoded UTF-8 , 也就是URL編碼的utf8格式。

那么就需要說一下nestjs的文件接收的編碼轉(zhuǎn)換的坑了。

使用nestjs接收文件時,使用:

@Post('upload/:bucket')
  @UseInterceptors(FilesInterceptor('files', 100))
  async uploadFile(
    @Param('bucket') bucket: string,
    @UploadedFiles() files: Express.Multer.File[],
  ) {}

這樣的方式接收文件。

問題在于它接收的時候,會把文件名從utf8轉(zhuǎn)為ISO-8859-1 (Latin-1 ) 編碼,這導(dǎo)致文件的中文名會變成:“çµå¶é”這樣的字符。

所以為了避免這樣的問題,就需要

formData.append('files', file, encodeURIComponent(file.name));

在這里調(diào)用encodeURIComponent對原始的文件名進行編碼,這樣到了后端,文件的編碼形式就不會改變。

后端使用文件名時,如下方法即可:

        files.map(async (f) => {
            // 解碼前端發(fā)送的url編碼形式,正確的將文件名傳輸過來
            const newfilename = decodeURIComponent(f.originalname);

            // 為minIO的每個文件添加一個單獨的uuid,防止文件名重名,在獲取文件信息以及下載文件時予以清除
            const UUID = randomUUID();
            const safeFilename = newfilename.replace(/[“”#]/g, '').trim();
            this.minioService.validateFile(f);

            // 保存文件信息到mysql數(shù)據(jù)庫
            await this.fileService.saveFile(
              safeFilename,
              UUID,
              f.mimetype,
              f.size,
            );

            // 分片上傳文件到 MinIO
            await this.minioService.uploadFile(UUID, f, bucket);

            // 更新任務(wù)的已上傳文件數(shù)
            const task = uploadTasks.get(taskId);
            if (task) task.uploadedFiles++;
          }),
        );

可以看到在第三行,調(diào)用了decodeURIComponent對文件的原始名稱進行解碼,即可得到正確的文件名。

總結(jié)

到此這篇關(guān)于前端發(fā)送文件后端的nest.js如何接收文件名的文章就介紹到這了,更多相關(guān)后端nest.js接收文件名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 純js實現(xiàn)遮罩層效果原理分析

    純js實現(xiàn)遮罩層效果原理分析

    這篇文章主要介紹了純js實現(xiàn)遮罩層效果,下面就它的原理做下分析,感興趣的朋友可以參考下
    2014-05-05
  • JavaScript實現(xiàn)煙花特效(面向?qū)ο?

    JavaScript實現(xiàn)煙花特效(面向?qū)ο?

    這篇文章主要為大家詳細介紹了JavaScript使用面向?qū)ο缶幊虒崿F(xiàn)煙花特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 微信小程序?qū)崿F(xiàn)的一鍵連接wifi功能示例

    微信小程序?qū)崿F(xiàn)的一鍵連接wifi功能示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)的一鍵連接wifi功能,結(jié)合實例形式分析了微信小程序操作WiFi連接的模塊初始化、配置、連接等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • javascript學(xué)習(xí)筆記之函數(shù)定義

    javascript學(xué)習(xí)筆記之函數(shù)定義

    本文主要給大家介紹了javascript的一些函數(shù)定義方面的基礎(chǔ)知識,包括函數(shù)聲明式、函數(shù)表達式、Function 構(gòu)造函數(shù)等,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • layui將table轉(zhuǎn)化表單顯示的方法(即table.render轉(zhuǎn)為表單展示)

    layui將table轉(zhuǎn)化表單顯示的方法(即table.render轉(zhuǎn)為表單展示)

    今天小編就為大家分享一篇layui將table轉(zhuǎn)化表單顯示的方法(即table.render轉(zhuǎn)為表單展示),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)別

    一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)別

    這篇文章主要帶領(lǐng)大家深入理解JavaScript中 fn() 和 return fn() 的區(qū)別,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 深入淺出JavaScript前端中的設(shè)計模式

    深入淺出JavaScript前端中的設(shè)計模式

    這篇文章主要介紹了JavaScript前端中的設(shè)計模式,設(shè)計模式是一套被反復(fù)使用,多數(shù)人知曉的,經(jīng)過分類編目的,代碼設(shè)計經(jīng)驗的總結(jié),感興趣想要詳細了解可以參考下文
    2023-05-05
  • 原生JS實現(xiàn)登錄框郵箱提示

    原生JS實現(xiàn)登錄框郵箱提示

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)登錄框郵箱提示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JS+CSS實現(xiàn)的藍色table選項卡效果

    JS+CSS實現(xiàn)的藍色table選項卡效果

    這篇文章主要介紹了JS+CSS實現(xiàn)的藍色table選項卡效果,通過鼠標(biāo)事件調(diào)用自定義函數(shù)實現(xiàn)頁面元素樣式的遍歷與動態(tài)切換效果,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • js實現(xiàn)登錄驗證碼

    js實現(xiàn)登錄驗證碼

    本文主要介紹了js實現(xiàn)登錄驗證碼的方法,代碼簡潔明了,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12

最新評論

桐梓县| 青神县| 九寨沟县| 高安市| 阿克苏市| 汽车| 信丰县| 逊克县| 新宾| 临汾市| 来安县| 南平市| 滁州市| 昌吉市| 织金县| 嵊州市| 喀喇沁旗| 吐鲁番市| 东兰县| 雷波县| 永济市| 开江县| 秦皇岛市| 栾城县| 红安县| 福海县| 龙井市| 平谷区| 肇东市| 方城县| 永顺县| 苗栗市| 昌乐县| 札达县| 深州市| 青州市| 光山县| 呈贡县| 荃湾区| 敦化市| 庄河市|