Michael Breeden Ответов: 2

Как я могу использовать PDF-файл в качестве потока?


Странная проблема. Любые предложения или ссылки будут оценены по достоинству.
Мне нужно обслуживать PDF-файлы, которые хороши в течение [90] дней для ссылок в электронных письмах пользователей.
90-дневное ограничение исключает простую службу S3, как и тот факт, что из-за соображений HIPPA все шифруется вверх по wazoo. Проблема усугубляется кучей странных ограничений безопасности и контента в сети компании AWS (PMI и PHI там так что все заблокировано крепче, чем дискета на 360 КБ).
Я хочу сделать страницу, на которую указывает ссылка, которая будет читать PDF-файл как поток байтов из S3. Я, наверное, могу это сделать, но тогда как я могу служить ему? Большое спасибо, м
.. Я вижу, что, как обычно, пытаться задать странный вопрос на этом форуме трудно... Если бы это не был странный вопрос, мне не нужно было бы спрашивать об этом здесь.

Что я уже пробовал:

Я действительно рассматривал перенаправление URL и перезапись URL, но в обоих случаях URL будет находиться в заголовке, и он будет перенаправляться в зашифрованный файл.
Использование AWS концептуально странно. S3 отсутствует, как и Cloudfront, вероятно. Я нашел что-то, что служит изображениям таким образом, и собираюсь посмотреть, что я могу с этим сделать, но мне бы хотелось больше ресурсов, если бы я мог их найти. c# - подавать файл в байте[] как URL - переполнение стека[^]
Просто чтобы было веселее, мой "интернет-сервер" будет лямбдой. Это не должно быть проблемой, но это означает, что я не могу записать его в локальный файл и обслуживать его. Я сделал это для Интрасетевого приложения, где я временно записываю PDF-файл на диск D: , чтобы избежать этого ... тот же дисковый файл, обслуживающий любую проблему, с которой вы столкнулись..

2 Ответов

Рейтинг:
16

Garth J Lancaster

Я бы задал вопрос : насколько сложен этот PDF-файл ? можете ли вы строить "на лету", используя iTextSharp или что-то в этом роде ??

Это тогда избавило бы вас от проблем, связанных с тем, что PDF-файл находится "в покое" где-то на сервере, а затем ему нужно найти файл/представление "в покое".

Если вы можете создать PDF-файл по запросу, то вы можете использовать некоторую информацию отсюда c# - Как вернуть PDF в браузер в MVC? - переполнение стека[^] чтобы вернуть поток с правильным заголовком, content disposition.

Кстати, 90-дневный лимит можно было бы обработать, добавив дату (созданную) + 90 дней в таблицу источника данных, например "недопустимо после"


Michael Breeden

На самом деле, как побочный вопрос, эти PDF-файлы не просто сложны, они нестандартны, и было трудно преобразовать их в PostScript с помощью Ghost Script.
.. Я действительно подозреваю, что ссылка, которую вы мне дали, должна быть тем, что мне нужно, так что как насчет этого?.. Я проверю его утром. У меня есть упрощенный PDF-документ, и я должен быть в состоянии легко преобразовать его в поток памяти. Если он служит ему, то я могу вместо этого прочитать PDF-файл из корзины S3 в виде строки Base64 в поток памяти. Спасибо. Я не могу дождаться, чтобы попробовать это.
..Подумав об этом, я сделал виджет, который будет преобразовываться из объекта JSON в объект PDF. Я знаю, что тот же метод можно использовать для чтения PDF-объектов в PDF-файле. Интересно, смогу ли я сопоставить PDF-файл, но это эквивалент самого PDF-файла, так что это не кажется улучшением. ... Конечно, я мог бы прочитать это как JSON из DynamoDB, но я все равно вернусь туда, откуда начал, и мне нужно будет сгенерировать поток памяти из JSON для обслуживания... Ну что ж. Облачное программирование кажется действительно странным.

Рейтинг:
11

Michael Breeden

Предложенная Гартом связь привела к решению проблемы. c# - дисплей ASP.NET сгенерированный pdf байт[] на веб - страницу без сохранения файла- переполнение стека[^]
Было еще несколько предложений о том, как это сделать с помощью веб-сайта MVC, но только эта страница привела меня к тому, как это сделать с обычным веб-сайтом. ASP.Net бритвенная страница. По существу, решение, для любого, кто мог бы найти это, работало и как объект, и как вложение. Мой код на C# был примерно таким:
byte[] bPDF = файл.ReadAllBytes("filename.pdf");
строка base64PDF = System.Преобразовать.ToBase64String(bPDF, 0, bPDF.Длина);
завернутый в строку стр = "&ЛТ;добавьте в src="сведения:приложение/формат PDF;формат base64," + ...getPDFAsBase64() + "" тип="применение/формате PDF" ширина="100%" высота="800 пикселей" /&ГТ;";
Мой код бритва была [HTML-код][тело] @HTML-код.Сырье(PDFModel.strReturnPDF()) [/тело][/HTML-код].
Он отображал PDF-файл в полный рост, 51 страница.
Теперь мне просто нужно прочитать его из ведра S3 и подать его с лямбда-упакованного "веб-сайта".