Как я генерирую и отправляю .zip файл пользователю в ASP.NET C#?

Оказывается, проблема заключалась в использовании модели Keras. Пример из учебника TF основан на построении модели Keras с использованием модуля tf.keras (все слои, модели и т. Д. Взяты из tf.keras). Хотя модель, которую я использовал (DenseNet), основана на модуле чистого keras, то есть все слои были получены из модуля keras, а не из tf.keras. Это приводит к тому, что tf.data.Dataset проверяется на наличие ndim в методе подгонки модели keras. Как только я настроил свою DenseNet на использование слоев tf.keras, все снова стало работать.

12
задан MStodd 7 May 2009 в 13:13
поделиться

6 ответов

Я бы проголосовал за SharpZipLib , чтобы создать Zip-файл. Затем вы захотите добавить заголовок ответа к выводу, чтобы вызвать диалог загрузки.

http://aspalliance.com/259

должен дать вам хорошую отправную точку для достижения этого. В основном вам нужно добавить заголовок ответа, установить тип содержимого и записать файл в выходной поток:

Response.AppendHeader( "content-disposition", "attachment; filename=" + name );
Response.ContentType = "application/zip";
Response.WriteFile(pathToFile);

Эта последняя строка может быть изменена на Response.Write (filecontents), если вы не хотите сохранять во временную папку. файл.

20
ответ дан 2 December 2019 в 04:43
поделиться

I'm sure others will recommend SharpZipLib

How do you intend to "send" it. .NET has built in Libraries for email via SMTP

EDIT

In that case you'll want to capture the output stream from SharpZipLib and write it directly to the Response. Just make sure you have the correct Mimetype set in the Response Headers (application/zip) and make sure you don't Response.Write anything else to the user.

2
ответ дан 2 December 2019 в 04:43
поделиться

Согласитесь с вышесказанным, SharpZipLib , для создания файлов .zip в .NET, это кажется очень популярным вариантом.

Что касается «отправки», если вы через SMTP / Email вы должны будете использовать пространство имен System.Net.Mail. В документации класса System.Net.Mail.Attachment есть пример того, как отправить файл по электронной почте.

Поцарапайте выше, к тому времени, когда я опубликовал это, я вижу, вы имели в виду возврат через HTTP Response.

0
ответ дан 2 December 2019 в 04:43
поделиться

DotNetZip позволяет вам легко это сделать, без записи в файл на диске на сервере. Вы можете записать zip-архив прямо в поток ответа, что вызовет появление диалогового окна загрузки в браузере.

Пример кода ASP.NET для DotNetZip

Еще пример кода ASP.NET для DotNetZip

snip :

    Response.Clear();
    Response.BufferOutput = false; // false = stream immediately
    System.Web.HttpContext c= System.Web.HttpContext.Current;
    String ReadmeText= String.Format("README.TXT\n\nHello!\n\n" + 
                                     "This is text for a readme.");
    string archiveName= String.Format("archive-{0}.zip", 
                                      DateTime.Now.ToString("yyyy-MMM-dd-HHmmss")); 
    Response.ContentType = "application/zip";
    Response.AddHeader("content-disposition", "filename=" + archiveName);

    using (ZipFile zip = new ZipFile())
    {
        zip.AddFiles(f, "files");            
        zip.AddFileFromString("Readme.txt", "", ReadmeText);
        zip.Save(Response.OutputStream);
    }
    Response.Close();

или в VB.NET:

    Response.Clear
    Response.BufferOutput= false
    Dim ReadmeText As String= "README.TXT\n\nHello!\n\n" & _
                              "This is a zip file that was generated in ASP.NET"
    Dim archiveName as String= String.Format("archive-{0}.zip", _
               DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"))
    Response.ContentType = "application/zip"
    Response.AddHeader("content-disposition", "filename=" + archiveName)

    Using zip as new ZipFile()
        zip.AddEntry("Readme.txt", "", ReadmeText, Encoding.Default)
        '' filesToInclude is a string[] or List<String>
        zip.AddFiles(filesToInclude, "files")            
        zip.Save(Response.OutputStream)
    End Using
    Response.Close
10
ответ дан 2 December 2019 в 04:43
поделиться

One concern is the size of the file that you will be streaming to the client. If you use SharpZipLib to build the ZIP in-memory, you don't have any temp files to cleanup, but you'll soon run into memory issues if the files are large and a number of concurrent users are downloading files. (We experienced this pretty frequently when ZIP sizes got to the 200 MB+ range.) I worked around this by the temp file to disk, streaming it to the user, and deleting it when then request completed.

0
ответ дан 2 December 2019 в 04:43
поделиться

DotNetZip создает поток без сохранения каких-либо ресурсов на сервере, поэтому вам не нужно ничего помнить о стирании. Как я уже сказал, это быстрое и интуитивно понятное кодирование с эффективной реализацией.

Моше

0
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: