伺服器文檔下載zip格式

来源:https://www.cnblogs.com/lvqianqian/archive/2018/06/05/9141442.html
-Advertisement-
Play Games

剛好這次項目中遇到了這個東西,就來弄一下,挺簡單的,但是前臺調用的時候弄錯了,浪費了大半天的時間,本人也是菜鳥一枚。開始吧。(MVC的) @using Rattan.Core.Utility;@{ string ButtonScript = string.Empty;}@if (Rattan.Bas ...


     剛好這次項目中遇到了這個東西,就來弄一下,挺簡單的,但是前臺調用的時候弄錯了,浪費了大半天的時間,本人也是菜鳥一枚。開始吧。(MVC的)

   

@using Rattan.Core.Utility;
@{
 string ButtonScript = string.Empty;
}
@if (Rattan.Basic.Globals.GetIsAuth(ViewBag.AuthValues, "QuickExport"))
{
 ButtonScript = @"
   {
       position: 0,
       id: 'btnQuickExport',
       text: '導出稿件附件',
       disabled: false,
       icon: 'pwd.gif',
       handler: function ()
       {
        QuickExport();
       }
      }";
}
<script type="text/javascript" language="javascript">
  helper.onBeforePageLoad = function (params) {

  }
  helper.onAfterPageLoad = function () {
    m_grid.insertToolBar(
    [
      @Html.Raw(ButtonScript)
    ]);
  }
</script>

<script type="text/javascript" language="javascript">
 function QuickExport() {                       
 // var rows = m_grid.getSelections();       ---這個是不打包,一個個跳出來的,沒卵用,當時應付的
 // $.each(rows, function (i, row) {
 //  var url = row.filelist + "?" + Math.random();
 //  window.setTimeout(function () {
 //   window.open(url, "_blank");
 //  }, 1000);
 // });
  var rows = m_grid.getSelections();
  var Draft_Id_Array = [];
  $.each(rows, function (i, row) {
   Draft_Id_Array.push(row.Draft_Id);
  });
  if (!Draft_Id_Array.length) {
   alert("至少選中一行!");
   return;
  }
  var url = "/BasicInfo/Meeting_Draft/ZipFileByCode";
  var postParams = {
   Draft_Ids: Draft_Id_Array.join(',')
  };
  window.open(url + '?Draft_Ids=' + Draft_Id_Array.join(','))
 }

</script> 

 /// <summary>
  /// 壓縮打包文件
  /// </summary>
  public ActionResult ZipFileByCode(string Draft_Ids)//string Draft_Id
  {
   MemoryStream ms = new MemoryStream();
   byte[] buffer = null;

   using (ZipFile file = ZipFile.Create(ms))  //壓縮包創建到記憶體
   {
    file.BeginUpdate();
    file.NameTransform = new IndexController();//通過這個名稱格式化器,可以將裡面的文件名進行一些處理。預設情況下,會自動根據文件的路徑在zip中創建有關的文件夾。

    string where = "Draft_Id in (" + Draft_Ids + ")";
    var draftInfo = Meeting_DraftRepository.Instance.GetMany(where).ToList();
    foreach (var draftInfoList in draftInfo)
    {
     if (string.IsNullOrWhiteSpace(draftInfoList.filelist) || draftInfoList.filelist.IndexOf('/') < 0)
     {

      continue;
     }
     var positonIndex = draftInfoList.filelist.LastIndexOf('/');
    string fileName = draftInfoList.filelist.Substring(positonIndex, draftInfoList.filelist.Length - positonIndex);//客戶端保存的文件名
     file.Add(Server.MapPath(draftInfoList.filelist));
    }
    file.CommitUpdate();
    buffer = new byte[ms.Length];
    ms.Position = 0;
    ms.Read(buffer, 0, buffer.Length);

   }

   //將中文轉換預防出現亂碼
   string excelName = "稿件附件".ToString();

   excelName = HttpUtility.UrlEncode(excelName, System.Text.Encoding.UTF8);

   DateTime dt = DateTime.Now;
   Response.AddHeader("content-disposition", "attachment;filename=" + excelName + DateTime.Now.ToString("yyyyMMdd")+ ".zip");
   Response.BinaryWrite(buffer);
   Response.Flush();
   Response.End();
   return View();
  }
 }


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring Boot 2.0 的推出又激起了一陣學習 Spring Boot 熱,就單從我個人的博客的訪問量大幅增加就可以感受到大家對學習 Spring Boot 的熱情,那麼在這麼多人熱衷於學習 Spring Boot 之時,我們自己也在思考: Spring Boot 為什麼帶來了這麼大的變革。 ...
  • c++文件的讀寫 1.文本方式的寫文件 3.二進位方式的寫文件 c++ include include using namespace std; int main(){ int ar[] = {11,232,123123,1223,455,4,4,5,56,4,33}; ofstream ofile ...
  • 一.首先在啟動類重寫SpringBootServletInitializer里的configure方法: 二.將springboot項目打成war包,使用maven打包需要修改pom文件,將預設的打為jar包修改成war: 也可以使用idea將構建好的項目打包,如圖: 三.和別的Spring項目一樣 ...
  • Java中的成員變數和局部變數一:成員變數;二:局部變數;三:成員變數與局部變數的區別; ...
  • 離 python2 退休還有 702 天,Python3.7 也將在 6 月份發佈正式版,你還記得 3.6 有哪些酷炫的特性嗎?來回顧一下。 可讀性更強的數字字面值 Python代碼在可讀性上做到了極致,被稱為是可執行偽代碼。然而,它還在不斷地改進,比如這個可讀性更好的數字字面值語法,就是方便程式員 ...
  • 如果某些條件滿足,才能做某件事情,而不滿足時不允許做,這就是所謂的判斷 不僅生活中有,在軟體開發中“判斷”功能也經常會用到 if判斷語句 if 要判斷的條件: 條件成立 if-else的使用格式 if 條件: 條件成立 else: 不滿足條件 if elif的功能 當xxx1滿足時,執行事情1,然後 ...
  • 一、引用相等性與對象相等性 1. 引用相等性 引用到堆上同一個對象的兩個引用是相等的,這就是引用的相等性。 如果想要知道兩個引用是否相等,可以使用==來比較變數上的位元組組合,如果引用到相同的對象,位元組組合也會一樣: 2. 對象相等性 堆上的兩個不同對象在意義上是相同的,這就是對象的相等性。 兩個對象 ...
  • 如圖: 若幹倉庫都是能推不能拉,下麵顯示當前分支不跟蹤遠程分支,後來在這裡找到給分支建立跟蹤的方法,又在這裡找到在VS2017中敲git命令的方法,在此感謝上述博文的作者。總結一下: 在VS2017進入 > 【工具】菜單 > Nuget包管理器 > 程式包管理器控制台 在該控制臺中執行:git br ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...