在ASP.NET MVC操作方法中,可以使用FileResult或FileStreamResult类来返回文件。但是,如果返回的文件中包含敏感信息,浏览器会将其阻止,以防止信息泄漏。
为了解决这个问题,可以在返回文件时,先将文件内容读取到内存中,然后再返回一个用于下载的加密文件。具体代码示例如下:
public ActionResult DownloadFile()
{
// 从服务器读取文件内容到内存中,加密文件内容
byte[] fileBytes = System.IO.File.ReadAllBytes(Server.MapPath("~/Files/Test.pdf"));
byte[] encryptedBytes = EncryptFile(fileBytes);
// 返回加密后的文件
return File(encryptedBytes, "application/octet-stream", "Test.pdf");
}
private byte[] EncryptFile(byte[] fileBytes)
{
// 对文件内容进行加密
byte[] key = new byte[] { /* 密钥 */ };
byte[] iv = new byte[] { /* 初始化向量 */ };
using (var aes = new AesCryptoServiceProvider())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (var encryptor = aes.CreateEncryptor())
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(fileBytes, 0, fileBytes.Length);
cs.FlushFinalBlock();
}
return ms.ToArray();
}
}
}
}
在上面的代码中,DownloadFile操作方法读取Test.pdf文件的内容,并调用EncryptFile方法对文件内容进行加密,然后使用File方法返回加密后的文件。
这种方法可以保护文件内容不被泄露,同时也可以避免浏览器阻止文件下载的问题。