首页 > 解决方案 > 将文件从客户端应用程序传递到 aspcore mvc 应用程序并准备好文件上传 c# asp.netcore mvc

问题描述

场景:我有一个调用客户端应用程序,它最终会生成一个需要通过电子邮件发送的 .pdf。我创建了一个 aspcore mvc 应用程序,它充当电子邮件编写器。其中一项操作采用电子邮件参数,例如 To、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);
        }

然后我将它添加到我的模型中以传递给视图以进行预填充。

你能建议一种工作方式来实现我所需要的吗?和或建议不同的方法来实现它。

谢谢!

标签: c#htmlasp.net-coreasp.net-core-mvc

解决方案


“我无法让它预填充文件输入框”

...你的意思是在浏览器中?不,出于安全原因,您不能这样做。浏览器无法在没有用户交互的情况下指定用户设备上的文件。这是为了防止恶意网站能够从设备的文件系统中偷偷地读取其他隐私数据。(老实说,无论如何这都是不切实际的——不同的操作系统有不同的文件系统结构,当然并非所有文件都存在于所有设备上,因此指定一个始终有效的路径基本上是不可能的。)

但无论如何,我也不确定您的要求是否有意义——据我所知,您已经生成了 PDF 并将其发送到 MVC 应用程序。因此,MVC 应用程序应该只将文件存储在服务器上,然后在用户完成并提交时将其与表单相关联。即使有可能,第二次上传也没有任何价值。


推荐阅读