[英]Returning a File read into MemoryStream for download in ajax C#
我使用OpenXML在C#应用程序中创建了一个Excel文件。 随后,我将其读取为MemoryStream类型。 现在,我想从C#函数返回此文件以下载,该函数返回一个ActionResult类型。 数据返回到ajax函数中,在该函数中,我希望为用户提供下载提示,以便他们可以根据需要保存此文件。 以下是一些示例代码和我尝试过的事情。
我使用MemoryStream的目的是不需要在服务器上存储上面创建的物理文件。 有没有一种方法可以将MemoryStream的内容返回给Ajax函数进行下载?
我不想在将文件的路径发送给ajax函数的TRIAL 3中使用它进行重定向。 但是,这可行,我从IE Web浏览器获得下载消息。 但是,除了“错误”之外,试验1或试验2均未发生任何事情。
是因为我需要在服务器上有一个物理文件才能下载它。 不知道ajax代码是否还需要其他东西才能使Trial 1或Trial 2正常工作。
任何有关如何正确执行操作的提示都将非常有帮助。 谢谢
公共ActionResult createFile()
{
...
// Reads a file into memory stream. Common for all trials below
memoryStream = ReadDataIntoMemoryStream();
// TRIAL 1
FileStream fs= new FileStream();
memoryStream.CopyTo(fs);
string mimeType = "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet";
return File(fs, mimeType);
// TRIAL 2
string mimeType = "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet";
byte[] fileBytes = memoryStream.ToArray();
return File(fileBytes, mimeType);
// TRIAL 3
string filepath = "..\...\..\filename.xlsx"; // actual physical file on
// the server
return Content(filepath);
}
阿贾克斯
$(document).ready(function () {
$('#777').on('click', function () {
$.ajax({
method: "GET",
url: "Report/createFile",
contentType: "application/download", // not needed for Trial 3
// where string is returned
dataType:"text",
success: function (data) {
// window.location.href = data; // THIS WORKS with TRIAL 3
// where filepath is returned
},
error: function (data) {
alert("Error.");
},
});
});
});
做好您的工作展示。
将内容放入memoryStream
,其Position
属性将指向流的末尾。 将其重新设置为开始即可阅读。
memoryStream = ReadDataIntoMemoryStream();
memoryStream.Position = 0L;
然后,您可以按需要使用File
方法。
return File(memoryStream, mimeType, suggestedFileName);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.