誰もがZIPファイルを返すのを知っていて、そこに含まれているファイルを開いても開くことができず、ファイルが破損しているとわかり、次のメソッドを理解し、 ?貢献できる人に 多くのおかげで、それは私のコントローラのメソッドです:ファイルをzipに追加してMVC5をダウンロードする
Public FileResult Download()
{
List <String> codes = new List <string>();
Codes.Add ("1079");
Codes.Add ("1078");
Codes.Add ("1077");
MemoryStream ms = new MemoryStream(); ;
Using (var zip = new ZipArchive (ms, ZipArchiveMode.Create, true))
{
Foreach (string codigoGar in codes)
{
String mimetypeOfFile = "";
Guarantees oGarantia = ControllerGarantias.getGarantia (SessionHelper.GetEntorno(), codeGar);
Var stream = new MemoryStream (oGarantia.comprobante);
Byte [] buffer = new byte [1024];
If (stream.Length> = 1024)
Stream.Read (buffer, 0, 1024);
Else
Stream.Read (buffer, 0, (int) stream.Length);
Try
{
System.UInt32 mimetype;
FindMimeFromData (0, null, buffer, 1024, null, 0, out mimetype, 0);
System.IntPtr mimeTypePtr = new IntPtr (mimetype);
MimetypeOfFile = Marshal.PtrToStringUni (mimeTypePtr);
Marshal.FreeCoTaskMem (mimeTypePtr);
String fileName = "";
If (! String.IsNullOrEmpty (mimetypeOfFile))
{
Switch (mimetypeOfFile.ToLower())
{
Case "application/pdf":
FileName = "Voucher_" + oGarantia.ServiceName + "_" + oGarantia.nroFactura + ".pdf";
Break;
Case "image/x-png":
FileName = "Voucher_" + oGarantia.ServiceName + "_" + oGarantia.nroFactura + ".png";
Break;
Case "image/pjpeg":
FileName = "Voucher_" + oGarantia.ServiceName + "_" + oGarantia.nroFactura + ".jpg";
Break;
}
}
Var entry = zip.CreateEntry (fileName, CompressionLevel.Fastest);
Using (MemoryStream fileStream = stream)
Using (var entryStream = entry.Open())
{
FileStream.CopyTo (entryStream);
}
}
Catch (Exception e)
{
Return null;
}
}
}
Return File (ms.ToArray(), "application/zip", "VouchersGuarantees.zip");
}
とJavaScriptからそれを呼び出すために、私は次の行を使用します。
Window.location.href = '@ Url.Action ("Download",' Warranties ')';
アイデアは、ビュー内のチェックボックスでテーブル内の特定の選択されたコードを取得し、データベースレコード、各コードの情報を検索するメソッドをコントローラに作成することですSQL、varbinaryのように。その後、それぞれの目的のために、ファイルをzip形式で作成してダウンロードできるようにします。ありがとう! –