Отправка нескольких документов, сгенерированных Aspose.words, на клиентский компьютер

У меня есть приложение .NET, которое создает 4 документа в формате .docx или .pdf, используя библиотеки DLL Aspose.words. Моя задача сейчас состоит в том, как доставить все 4 документа клиенту сразу после создания. Делал ли кто-нибудь это раньше, и если да, то как вы это делали? Я могу отправлять клиенту отдельные файлы, но когда я пытаюсь отправить несколько файлов, клиент получает только последний файл, указанный в коде. Например:

Dim CLdoc As New Document("C:/Temp/Cover Letter.docx")
Dim CLbuilder As New DocumentBuilder(CLdoc)

'Build CLDoc content

Dim MTdoc As New Document("C:/Temp/Master Terms.docx")
Dim MTbuilder As New DocumentBuilder(MTdoc)

'Build MTDoc content

CLdoc.Save(Response, "iama.docx", ContentDisposition.Inline, Nothing)
MTdoc.Save(Response, "iama1.docx", ContentDisposition.Inline, Nothing)

Единственный документ, который отправляется клиенту, — это «iama1.docx». Как я могу заставить приложение отправлять оба? Одна из моих идей заключалась в том, чтобы отправить оба файла в zip-архив и отправить его клиенту, но я действительно понятия не имею, как это сделать. Любые идеи?

РЕДАКТИРОВАТЬ

Используя Ionic Zip, я попытался сохранить сгенерированные файлы в поток памяти, добавить их в zip-архив и сохранить на диск (только временно для тестирования; в конечном итоге я отправлю zip-архив на клиентскую машину). Теперь моя проблема заключается в том, что файлы .docx, которые я добавил, пусты. Я делаю что-то не так, сохраняя сгенерированный файл в поток памяти?

Dim CLdoc As New Document("C:/Temp/Cover Letter.docx")
Dim CLbuilder As New DocumentBuilder(CLdoc)

'Build CLDoc content

Dim MTdoc As New Document("C:/Temp/Master Terms.docx")
Dim MTbuilder As New DocumentBuilder(MTdoc)

'Build MTDoc content    

Dim CLDocStream As New MemoryStream
Dim MTDocStream As New MemoryStream

CLdoc.Save(CLDocStream, SaveFormat.docx)
MTdoc.Save(MTDocStream, SaveFormat.docx)

Using zip1 As New ZipFile()

    zip1.AddEntry("CL.docx", CLDocStream)
    zip1.AddEntry("MT.docx", MTDocStream)
    zip1.Save("c:/Temp/test.zip")

End Using

person StephenT    schedule 29.04.2014    source источник
comment
Это довольно общий вопрос. Вы имеете в виду автоматически отправлять документы по электронной почте? Загрузить на сайт?   -  person SSS    schedule 30.04.2014
comment
Извиняюсь. Я имею в виду отправку на клиентскую машину сразу после создания файлов. Предложите пользователю открыть или сохранить сгенерированные файлы в идеале.   -  person StephenT    schedule 30.04.2014


Ответы (3)


Я работаю разработчиком социальных сетей в Aspose. Проверьте следующий пример, чтобы отправить документы клиенту сразу после создания.

Document doc = new Document("input.doc");

//Do you document processing

//Send the generated document using Response Object.
doc.Save(Response, "output.doc", ContentDisposition.Inline, null);
person Nausherwan Aslam    schedule 30.04.2014
comment
Спасибо за ответ, Наушерван. На самом деле я смог отправить отдельные файлы клиенту, используя метод, который вы показали. Моя проблема заключается в том, как отправить несколько файлов клиенту. Я добавил дополнительный код к моему вопросу, чтобы проиллюстрировать мою проблему здесь. - person StephenT; 30.04.2014
comment
Что ж, в этом случае вам нужно будет использовать какую-нибудь бесплатную библиотеку, чтобы сначала заархивировать файлы перед отправкой клиенту. Если вы используете .NET Framework 4.5, вы можете проверить следующую ссылку. codeguru.com/csharp/. сеть/. Вы также можете обратиться к следующей ссылке, чтобы использовать стороннюю dll для архивирования файлов. codeproject.com/Tips/ 622788/ - person Nausherwan Aslam; 30.04.2014

Если ваша программа запущена на ПК клиента, вы можете использовать Process.Start(filename) для загрузки документа с помощью зарегистрированного приложения (например, Word или Adobe Reader)

person SSS    schedule 30.04.2014
comment
Это веб-приложение, размещенное на удаленном сервере, поэтому я предполагаю, что это решение не сработает, верно? - person StephenT; 30.04.2014
comment
Нет, не будет. Извините, я пропустил, что это был вопрос ASP.NET - person SSS; 30.04.2014

Я нашел решение. Причина, по которой я получал пустые файлы в своем zip-архиве, заключалась в том, что позиция потока памяти в то время, когда я добавляю записи в zip-архив, находится в конце потока. Когда я указал поток памяти обратно на начало потока прямо перед добавлением записей, он работает как шарм. Пересмотренный код (включая потоковую передачу zip-архива клиенту):

Dim CLdoc As New Document("C:/Temp/Cover Letter.docx")
Dim CLbuilder As New DocumentBuilder(CLdoc)

'Build CLDoc content

Dim MTdoc As New Document("C:/Temp/Master Terms.docx")
Dim MTbuilder As New DocumentBuilder(MTdoc)

'Build MTDoc content    

Dim CLDocStream As New MemoryStream
Dim MTDocStream As New MemoryStream

CLdoc.Save(CLDocStream, SaveFormat.docx)
MTdoc.Save(MTDocStream, SaveFormat.docx)

CLDocStream.Seek(0, SeekOrigin.Begin)
MTDocStream.Seek(0, SeekOrigin.Begin)

Dim ZipStream As New MemoryStream()

Response.Clear()
Response.ContentType = "application/zip"
Response.AddHeader("Content-Disposition", "attachment;filename=Docs.zip")

Using zip1 As New ZipFile()

    zip1.AddEntry("CL.docx", CLDocStream)
    zip1.AddEntry("MT.docx", MTDocStream)
    zip1.Save(Response.OutputStream)

End Using

ZipStream.WriteTo(Response.OutputStream)
Response.End()
person StephenT    schedule 30.04.2014