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

.netcore+vue 實(shí)現(xiàn)壓縮文件下載功能

 更新時(shí)間:2020年09月24日 09:36:52   作者:itbeta  
這篇文章主要介紹了.netcore+vue 實(shí)現(xiàn)壓縮文件下載功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一.前言

目前接觸的項(xiàng)目中,給定的需求是將系統(tǒng)內(nèi)所有用戶的數(shù)據(jù)整理好,并保存到文件夾內(nèi),目的主要是防止用戶在實(shí)施人員已配置好的基礎(chǔ)上由于不熟悉系統(tǒng),導(dǎo)致的誤刪或者誤操作。減少實(shí)施人員的配置工作。我首先想到的就是將數(shù)據(jù)導(dǎo)入到Excel中,并以各個(gè)用戶的名稱命名文件夾做好分類。

vue下實(shí)現(xiàn)Excel導(dǎo)入這個(gè)我們見的比較多了,當(dāng)時(shí)我也確實(shí)實(shí)現(xiàn)了下載Excel的功能,但是后續(xù)發(fā)現(xiàn)保存的文件都在服務(wù)器上,那就有一個(gè)問題了,實(shí)施人員是通過頁面點(diǎn)擊的一鍵保存按鈕,數(shù)據(jù)也確實(shí)保存了,但是卻是在服務(wù)器上,如果想實(shí)時(shí)看到數(shù)據(jù)呢,是不是還要去服務(wù)器上拷貝一份下來。相對來講確實(shí)比較繁瑣,所以整理了下載壓縮文件到本地的功能,一起看一下怎么實(shí)現(xiàn)的吧。

1.1.net core 壓縮文件

思路是在后臺(tái)將文件夾整體壓縮為zip格式的壓縮包,并返回文件流到前端,然后前端接收文件流實(shí)現(xiàn)瀏覽器下載的功能。

后端代碼,將

public async Task<FileStreamResult> DownloadFiles(DownLoadModel input)
    {
      if (!Directory.Exists(input.pathUrl))
      {
        throw new UserFriendlyException("當(dāng)前要下載的文件夾不存在或已刪除");
      }
      var zipFileUrl = _configurationRoot["downLoadUrlConf:downloadZipFileUrl"];
      if (File.Exists(zipFileUrl))
      {
        File.Delete(zipFileUrl);
      }
      ZipHelper.CreateZip(input.pathUrl, zipFileUrl);
      var memoryStream = new MemoryStream();
      using (var stream = new FileStream(zipFileUrl, FileMode.Open))
      {
        await stream.CopyToAsync(memoryStream);
      }
      memoryStream.Seek(0, SeekOrigin.Begin);
      return new FileStreamResult(memoryStream, "application/octet-stream");//文件流方式,指定文件流對應(yīng)的ContenType。
    }
 public static class ZipHelper
  {
    /// <summary>
    /// 壓縮文件
    /// </summary>
    /// <param name="sourceFilePath"></param>
    /// <param name="destinationZipFilePath"></param>
    public static void CreateZip(string sourceFilePath, string destinationZipFilePath)
    {
      if (sourceFilePath[sourceFilePath.Length - 1] != System.IO.Path.DirectorySeparatorChar)
        sourceFilePath += System.IO.Path.DirectorySeparatorChar;

      ZipOutputStream zipStream = new ZipOutputStream(File.Create(destinationZipFilePath));
      zipStream.SetLevel(6); // 壓縮級(jí)別 0-9
      CreateZipFiles(sourceFilePath, zipStream, sourceFilePath);

      zipStream.Finish();
      zipStream.Close();
    }
    /// <summary>
    /// 遞歸壓縮文件
    /// </summary>
    /// <param name="sourceFilePath">待壓縮的文件或文件夾路徑</param>
    /// <param name="zipStream">
    /// <param name="staticFile"></param>
    private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream, string staticFile)
    {
      Crc32 crc = new Crc32();
      string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
      foreach (string file in filesArray)
      {
        if (Directory.Exists(file))           //如果當(dāng)前是文件夾,遞歸
        {
          CreateZipFiles(file, zipStream, staticFile);
        }

        else                      //如果是文件,開始?jí)嚎s
        {
          FileStream fileStream = File.OpenRead(file);

          byte[] buffer = new byte[fileStream.Length];
          fileStream.Read(buffer, 0, buffer.Length);
          string tempFile = file.Substring(staticFile.LastIndexOf("\\") + 1);
          ZipEntry entry = new ZipEntry(tempFile);

          entry.DateTime = DateTime.Now;
          entry.Size = fileStream.Length;
          fileStream.Close();
          crc.Reset();
          crc.Update(buffer);
          entry.Crc = crc.Value;
          zipStream.PutNextEntry(entry);

          zipStream.Write(buffer, 0, buffer.Length);
        }
      }
    }
  }

其中CreateZip方法傳入一個(gè)源文件的路徑,一個(gè)目標(biāo)文件的路徑,這里我的目標(biāo)文件設(shè)置在appsetting.json里是個(gè)臨時(shí)路徑,只為前端當(dāng)次下載使用。這樣我們就在后臺(tái)將數(shù)據(jù)以壓縮包的形式壓縮好,并返回?cái)?shù)據(jù)流給前端了。

1.2 vue 下載壓縮文件

 <el-button
     icon="el-icon-download"
     size="mini"
     type="primary"
     class="pull-right"
     @click="downloadFile"
    >下載文件到本地</el-button>
 downloadFile() {
    this.loading = true;
    let postData = { pathUrl: this.filePathMag };
    AjaxHelper.post(this.downLoadUrl, postData, {
     responseType: "blob",
    }).then((res) => {
     // 處理返回的文件流
     const content = res.data;
     const blob = new Blob([content], { type: "application/zip" });
     const fileName = this.tenant.name + "配置信息.zip";
     if ("download" in document.createElement("a")) {
      // 非IE下載
      const elink = document.createElement("a");
      elink.download = fileName;
      elink.style.display = "none";
      elink.href = URL.createObjectURL(blob);
      document.body.appendChild(elink);
      elink.click();
      URL.revokeObjectURL(elink.href); // 釋放URL 對象
      document.body.removeChild(elink);
     } else {
      // IE10+下載
      navigator.msSaveBlob(blob, fileName);
     }
     this.loading = false;
    });
   },

之前下載Excel時(shí),我們傳入后端的content-type為"application/json;application/octet-stream",經(jīng)過測試發(fā)現(xiàn)壓縮文件不能使用這種content-type,所以我們?nèi)サ袅恕?br /> 另外就是const blob = new Blob([content], { type: "application/zip" });這行代碼,如果不加,雖然也能下載,但是下載后的壓縮包卻無法打開,提示壓縮不正確或壓縮包已損壞。

好了,到此壓縮文件的下載就完成了,由于我也是第一次遇到壓縮文件的下載,經(jīng)過摸索終于解決了問題??雌饋硪脖容^簡單,你學(xué)會(huì)使用了嗎?

總結(jié)

到此這篇關(guān)于.netcore+vue 實(shí)現(xiàn)壓縮文件下載的文章就介紹到這了,更多相關(guān)vue 實(shí)現(xiàn)壓縮文件下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)現(xiàn)簡易的雙向數(shù)據(jù)綁定

    vue實(shí)現(xiàn)簡易的雙向數(shù)據(jù)綁定

    這篇文章主要介紹了vue如何實(shí)現(xiàn)簡易的雙向數(shù)據(jù)綁定,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • Vue+webpack項(xiàng)目基礎(chǔ)配置教程

    Vue+webpack項(xiàng)目基礎(chǔ)配置教程

    這篇文章主要介紹了Vue+webpack項(xiàng)目基礎(chǔ)配置教程,需要的朋友可以參考下
    2018-02-02
  • vue3實(shí)戰(zhàn)教程之a(chǎn)xios的封裝和環(huán)境變量

    vue3實(shí)戰(zhàn)教程之a(chǎn)xios的封裝和環(huán)境變量

    這篇文章主要給大家介紹了關(guān)于vue3實(shí)戰(zhàn)教程之a(chǎn)xios的封裝和環(huán)境變量的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Vue實(shí)現(xiàn)生成二維碼的簡單方式

    Vue實(shí)現(xiàn)生成二維碼的簡單方式

    與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)生成二維碼的簡單方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Vue中使用eslint和prettier格式化代碼方式

    Vue中使用eslint和prettier格式化代碼方式

    這篇文章主要介紹了Vue中使用eslint和prettier格式化代碼方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue結(jié)合vant實(shí)現(xiàn)聯(lián)動(dòng)效果

    vue結(jié)合vant實(shí)現(xiàn)聯(lián)動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了vue結(jié)合vant實(shí)現(xiàn)聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解vue-router傳參的兩種方式

    詳解vue-router傳參的兩種方式

    Vue Router 是 Vue.js 官方的路由管理器。這篇文章主要介紹了詳解vue-router傳參的兩種方式,需要的朋友可以參考下
    2018-09-09
  • Vue中Quill富文本編輯器的使用教程

    Vue中Quill富文本編輯器的使用教程

    這篇文章主要介紹了Vue中Quill富文本編輯器的使用教程,包括自定義工具欄、自定義字體選項(xiàng)、圖片拖拽上傳、圖片改變大小等使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • vue實(shí)現(xiàn)拍照或錄像的示例代碼

    vue實(shí)現(xiàn)拍照或錄像的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用vue實(shí)現(xiàn)拍照或錄像的功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • vue實(shí)現(xiàn)面包屑的方法

    vue實(shí)現(xiàn)面包屑的方法

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)面包屑的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

新邵县| 大方县| 南充市| 白山市| 余江县| 荣昌县| 铜川市| 原平市| 沈阳市| 兰州市| 淳化县| 靖西县| 红河县| 望江县| 北川| 申扎县| 扬州市| 南溪县| 湖口县| 连平县| 正安县| 贺州市| 烟台市| 宝山区| 肃南| 银川市| 金山区| 高淳县| 剑川县| 东宁县| 广丰县| 南靖县| 高要市| 舟曲县| 黄大仙区| 常德市| 潞西市| 盘锦市| 南乐县| 永寿县| 谢通门县|