我正在使用下面的代码进行创建,它会向用户显示用户是否能够保存或打开或取消Excel文件.......
我已成功下载该文件,但我需要在显示用户提示之前进行压缩,稍后的zip文件将显示给用户,例如选项打开或保存或取消.....
如何不使用任何其他第三方库并使用Microsoft自己的 Gzip DLL?
以下代码用于导出到Excel功能:
public ActionResult ExportToExcel()
{
byte[] file;
string targetFilename = string.Format("{0}-{1}.xlsx", "Generated", "excel");
DataTable dt = common.CreateExcelFile.ListToDataTable(GetSearchDraftPRResults());
common.CreateExcelFile excelFileForExport = new CreateExcelFile();
file = excelFileForExport.CreateExcelDocumentAsStream(dt, targetFilename);
Response.Buffer = true;
return File(file, "application/vnd.ms-excel", targetFilename);
}
在向用户展示文件之前,有人会请求帮助解决这个问题吗?
非常感谢提前.....
修改后的代码:
public ActionResult ExportToExcel()
{
byte[] file;
string targetFilename = string.Format("{0}-{1}.xlsx", "Generated", "excel");
DataTable dt = common.CreateExcelFile.ListToDataTable(GetSearchDraftPRResults());
common.CreateExcelFile excelFileForExport = new CreateExcelFile();
file = excelFileForExport.CreateExcelDocumentAsStream(dt, targetFilename);
Response.Buffer = true;
byte[] zipFile = Compress(file);
return File(file, "application/vnd.ms-excel", targetFilename);
}
public byte[] Compress(FileInfo fileToCompress)
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((System.IO.File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
using (FileStream compressedFileStream = System.IO.File.Create(fileToCompress.FullName + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
originalFileStream.CopyTo(compressionStream);
}
}
}
MemoryStream mem = new MemoryStream();
CopyStream(originalFileStream, mem);
return mem.ToArray();
}
}
public static void CopyStream(Stream input, Stream output)
{
byte[] b = new byte[32768];
int r;
while ((r = input.Read(b, 0, b.Length)) > 0)
output.Write(b, 0, r);
}
答案 0 :(得分:1)
查看SharpZipLib library。它运行良好,即使在商业应用中也可以自由使用。
答案 1 :(得分:-1)
您可以使用JCraft的JZlib。非常容易使用,压缩声明看起来像这样,里面的代码取决于你在做什么,但你可以在JZlib示例中找到工作示例:
public byte[] compress(byte[] buf, int start, int[] len) {
...
}