场景:我有一个调用客户端应用程序,它最终将生成一个需要发送电子邮件的.pdf。我已经创建了一个作为电子邮件编写器的aspcore mvc应用程序。其中一个操作采用电子邮件参数,例如,Cc。等和预填充部分或所有的电子邮件表格,供他们审查和按发送。
问题:我正在努力传递一个文件路径,以便作为附件在表单中使用。我也不认为这是最安全的方法,因为它可能导致多个安全漏洞。
我的附件来自我的电子邮件类:
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);
}
然后,我将它添加到我的模型中,将其传递到视图以进行预填充。
你能提出一个工作方法来达到我的需要吗?或者提出不同的方法来达到这个目的。
谢谢!
发布于 2020-06-18 01:24:29
“我无法让它预先填充文件输入框”
...you的意思是在浏览器中?不,你不能那样做,因为安全原因。在没有用户交互的情况下,浏览器无法在用户设备上指定文件。这是为了防止恶意网站偷偷地从设备的文件系统读取私有数据。(老实说,不管怎样,这是不切实际的--不同的操作系统有不同的文件系统结构,当然,并非所有的文件都存在于所有设备上,所以指定一条始终能够工作的路径基本上是不可能的。)
但无论如何,我也不确定您的需求是否有意义--从我可以告诉您的信息来看,您已经生成了PDF并将其发送到MVC应用程序。因此,MVC应用程序应该将文件存储在服务器上,然后在用户完成并提交表单时将其与表单相关联。即使有可能,第二次上传也没有任何价值。
https://stackoverflow.com/questions/62446546
复制相似问题