【发布时间】:2016-03-08 11:16:44
【问题描述】:
我环顾四周,似乎很多人都有同样的问题,正在下载的文件已损坏。我在前端使用 web api 2 和 angular。
服务器端
[Route("api/export/{id}")]
public async Task<IHttpActionResult> GetFileAsync(Guid id)
{
var originalFile = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/template.xls");
var stream = _exportService.Export(id, originalFile);
return new FileActionResult(stream);
}
public class FileActionResult : IHttpActionResult
{
private Stream Data { get; }
public FileActionResult(Stream data)
{
Data = data;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage
{
Content = new StreamContent(Data)
};
//response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
//response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
//response.Content.Headers.ContentDisposition.FileName = "ExportedCOBie.xls";
response.Content.Headers.ContentLength = Data.Length;
return Task.FromResult(response);
}
}
角度客户端
function(Restangular, FileSaver, Blob) {
this.exportToCobie = function(projectId) {
toastr.info('Exporting data', 'Info');
Restangular.one("export/" + projectId)
.get({ responseType: "arraybuffer" })
.then(function (data) {
var file = new Blob([data], { type: 'application/vnd.ms-excel' });
FileSaver.saveAs(file, 'export.xls');
})
}
}
任何帮助将不胜感激,谢谢。
public MemoryStream Export(Guid projectId, string file)
{
try
{
var fileStream = new FileStream(file, FileMode.Open);
_workbook = new HSSFWorkbook(fileStream);
fileStream.Close();
var contacts = _uow.ContactRepository.FindAllBy(c => c.ProjectId == projectId);
//var fileOutputStream = new FileStream(file, FileMode.Create);
var memoryStream = new MemoryStream();
_workbook.Write(memoryStream);
memoryStream.Position = 0;
return memoryStream;
}
catch (Exception exception)
{
_logger.Error(exception.Message);
}
return null;
}
【问题讨论】:
-
您下载的文件是否有内容,但只是损坏了,还是 0 字节?
-
@RonBrogan 它有内容但已损坏,奇怪的字符。
-
你可以在这里发布发生了什么:
_exportService.Export -
@RonBrogan Export 只是创建电子表格的业务逻辑。我已经通过 MVC 控制器测试了 _exportService.Export 方法,它运行良好。
-
在这种情况下,我能看到的唯一情况是,如果您的流在某些时候不在适当的位置,并且只有部分流到达您想要的位置。跨度>
标签: asp.net angularjs asp.net-web-api asp.net-web-api2