Оказывается, проблема заключалась в использовании модели Keras. Пример из учебника TF основан на построении модели Keras с использованием модуля tf.keras (все слои, модели и т. Д. Взяты из tf.keras). Хотя модель, которую я использовал (DenseNet), основана на модуле чистого keras, то есть все слои были получены из модуля keras, а не из tf.keras. Это приводит к тому, что tf.data.Dataset проверяется на наличие ndim в методе подгонки модели keras. Как только я настроил свою DenseNet на использование слоев tf.keras, все снова стало работать.
Я бы проголосовал за SharpZipLib , чтобы создать Zip-файл. Затем вы захотите добавить заголовок ответа к выводу, чтобы вызвать диалог загрузки.
должен дать вам хорошую отправную точку для достижения этого. В основном вам нужно добавить заголовок ответа, установить тип содержимого и записать файл в выходной поток:
Response.AppendHeader( "content-disposition", "attachment; filename=" + name );
Response.ContentType = "application/zip";
Response.WriteFile(pathToFile);
Эта последняя строка может быть изменена на Response.Write (filecontents), если вы не хотите сохранять во временную папку. файл.
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.
Согласитесь с вышесказанным, SharpZipLib , для создания файлов .zip в .NET, это кажется очень популярным вариантом.
Что касается «отправки», если вы через SMTP / Email вы должны будете использовать пространство имен System.Net.Mail. В документации класса System.Net.Mail.Attachment есть пример того, как отправить файл по электронной почте.
Поцарапайте выше, к тому времени, когда я опубликовал это, я вижу, вы имели в виду возврат через HTTP Response.
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
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.
DotNetZip создает поток без сохранения каких-либо ресурсов на сервере, поэтому вам не нужно ничего помнить о стирании. Как я уже сказал, это быстрое и интуитивно понятное кодирование с эффективной реализацией.
Моше