Передайте файл из клиентского приложения в приложение aspcore mvc и подготовьте файл для загрузки c# asp .netcore mvc - PullRequest
0 голосов
/ 18 июня 2020

Сценарий: у меня есть вызывающее клиентское приложение, которое, в конце концов, сгенерирует .pdf, который нужно отправить по электронной почте. Я создал приложение aspcore mvc, которое действует как электронная почта composer. Одно из действий принимает параметры электронной почты, например Кому, Cc .. et c, и предварительно заполняет часть или всю форму электронной почты, чтобы они могли просмотреть и нажать «Отправить».

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

Поддержка моих вложений из моего класса электронной почты:

public List<IFormFile> Attachments { get; set; }

Если вызывающее приложение не передало путь к файлу вложения, пользователь может использовать поле ввода файла, чтобы выбрать его вручную. Это прекрасно работает. Однако, если путь к файлу отправляется, я не могу заставить его предварительно заполнить поле ввода файла, как я делаю с остальной частью формы.

            if (attachment != null)
        {
            var fileBytes = System.IO.File.ReadAllBytes(attachment);
            MemoryStream ms = new MemoryStream();
            ms.Write(fileBytes, 0, fileBytes.Length);
            var result = new FileStreamResult(ms, "application/pdf");
            IFormFile file = new FormFile(result.FileStream, 0, result.FileStream.Length, "filename", "filename.pdf")
            {
                Headers = new HeaderDictionary(),
                ContentType = "application/pdf",
            };

            attachmentList.Add(file);
        }

Затем я добавляю его в свою модель для передачи в представление для предварительного заполнения.

Не могли бы вы предложить рабочий способ достижения того, что мне нужно? и или предложите различные способы достижения этой цели.

Спасибо!

1 Ответ

1 голос
/ 18 июня 2020

«Я не могу получить это для предварительного заполнения поля ввода файла»

... вы имеете в виду в браузере? Нет, вы не можете этого сделать из соображений безопасности. Браузер не имеет возможности указать файл на устройстве пользователя без взаимодействия с пользователем. Это сделано для того, чтобы вредоносные веб-сайты не могли тайно читать личные данные из файловых систем устройств. (И, честно говоря, это в любом случае непрактично - разные операционные системы имеют разные структуры файловых систем, и, конечно, не все файлы существуют на всех устройствах, поэтому указать путь, который всегда будет работать, в принципе невозможно.)

Но в любом случае я Я тоже не уверен, что ваше требование имеет смысл - насколько я могу судить, вы уже создали PDF-файл и отправили его в приложение MVC. Таким образом, приложение MVC должно просто сохранить файл на сервере, а затем связать его с формой, когда она будет завершена и отправлена ​​пользователем. Даже если бы это было возможно, не было бы смысла загружать его во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...