在 C# (Umbraco) 中创建可下载文件
Create a downloadable file in C# (Umbraco)
对于最近的一个项目,我们试图在 C# Umbraco 中创建一个可下载的文件,但我似乎无法让它工作。对于下载,我使用 System.Web.HttpContext.Current.Response。在 Umbraco CMS 中按下按钮后调用该函数。该函数被调用,但不响应下载。该函数在继承自 System.Web.Http.ApiController.
的 class 中实现
我知道这个问题与其他一些问题相匹配,但我尝试了不同的解决方案,我觉得我忽略了什么。
源代码:
[Route("feedback")]
[HttpPost]
public void Add(FeedbackRequest feedback)
{
var Response = HttpContext.Current.Response;
string filePath = "C:\testfile.txt";
var file = new FileInfo(filePath);
if (file.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
//Doesn't work with plain/text either
Response.ContentType = "application/force-download";
Response.Flush();
Response.TransmitFile(file.FullName);
try
{
Response.End();
}
catch (ThreadAbortException err)
{
}
catch (Exception err)
{
}
}
}
您将您的方法设置为 void,它应该返回一个结果
public ActionResult Add(FeedbackRequest feedback)
{
string filepath = "some filepath";
byte[] filedata = File.ReadAllBytes(filepath);
string contentType = MimeMapping.GetMimeMapping(filepath);
var contentInfo = new System.Net.Mime.ContentDisposition
{
FileName = "download filename",
Inline = false,//ask browser for download prompt
};
Response.AppendHeader("Content-Disposition", contentInfo.ToString());
return File(filedata, contentType);
}
问题出在我的 js 上。我有:
$http.get('/someurl/Export').
success(function (data) {
//console.log(data);
$scope.importOutput = data;
});
修复是:
window.open('/someurl/Export', '_blank');
谢谢大家的回答。我以为 js 没问题,因为它正在处理调用,但它似乎不是。
对于最近的一个项目,我们试图在 C# Umbraco 中创建一个可下载的文件,但我似乎无法让它工作。对于下载,我使用 System.Web.HttpContext.Current.Response。在 Umbraco CMS 中按下按钮后调用该函数。该函数被调用,但不响应下载。该函数在继承自 System.Web.Http.ApiController.
的 class 中实现我知道这个问题与其他一些问题相匹配,但我尝试了不同的解决方案,我觉得我忽略了什么。
源代码:
[Route("feedback")]
[HttpPost]
public void Add(FeedbackRequest feedback)
{
var Response = HttpContext.Current.Response;
string filePath = "C:\testfile.txt";
var file = new FileInfo(filePath);
if (file.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
//Doesn't work with plain/text either
Response.ContentType = "application/force-download";
Response.Flush();
Response.TransmitFile(file.FullName);
try
{
Response.End();
}
catch (ThreadAbortException err)
{
}
catch (Exception err)
{
}
}
}
您将您的方法设置为 void,它应该返回一个结果
public ActionResult Add(FeedbackRequest feedback)
{
string filepath = "some filepath";
byte[] filedata = File.ReadAllBytes(filepath);
string contentType = MimeMapping.GetMimeMapping(filepath);
var contentInfo = new System.Net.Mime.ContentDisposition
{
FileName = "download filename",
Inline = false,//ask browser for download prompt
};
Response.AppendHeader("Content-Disposition", contentInfo.ToString());
return File(filedata, contentType);
}
问题出在我的 js 上。我有:
$http.get('/someurl/Export').
success(function (data) {
//console.log(data);
$scope.importOutput = data;
});
修复是:
window.open('/someurl/Export', '_blank');
谢谢大家的回答。我以为 js 没问题,因为它正在处理调用,但它似乎不是。