Я использую ниже код для создания, и он будет показывать пользователю запрос пользователю, может ли пользователь сохранить или открыть или отменить файл excel.....
Я успешно загружаю файл, но мне нужно застегнуть молнию, пока не появится приглашение пользователя. Более поздний zip файл будет показан пользователю, например, с открытыми или сохраняющими или отмененными параметрами.....
Как я могу это сделать, не используя какую-либо другую стороннюю библиотеку и используя собственную Gzip- библиотеку Microsoft?
Ниже приведен код для экспорта в 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);
}
Проверьте библиотеку SharpZipLib. Он работает очень хорошо и может использоваться даже в коммерческих приложениях.
Вы можете использовать JZlib от JCraft. Очень проста в использовании, объявление сжатия может выглядеть так: внутри код зависит от того, что вы делаете, но вы можете найти рабочий пример в примерах JZlib:
public byte[] compress(byte[] buf, int start, int[] len) {
...
}