MVC/WebApi 来自 HTTPPostedFileBase 的流
MVC/WebApi Stream from HTTPPostedFileBase
我正在尝试将流从 HttpPostedFileBase 传递到服务方法而不保存到磁盘。
//Controller Action
[HttpPost]
public void Import()
{
if (Request.Files.Count == 0)
return new HttpStatusCodeResult(404);
var file = Request.Files[0];
_departmentAppService.Import(file.InputStream);
}
//Service Method
public string Import(Stream stream)
{
var excelFile = ExcelFile.Load(stream, LoadOptions.CsvDefault);
var worksheet = excelFile.Worksheets[0];
var jsonString = worksheet.ToJsonString();
return jsonString;
}
流传给方法时抛出"Property accessor 'ReadTimeout' on object 'System.Web.HttpInputStream' threw the following exception:'Timeouts are not supported on this stream.'"的错误。有惯用的方法吗?
我无法重现此问题,因此我无法检查您获得的堆栈跟踪,但我认为您超时了,因为您正在处理大型 CSV 文件,在这种情况下,我会尝试增加 'executionTimeout' 在 web.config.
您也可以尝试使用临时内存流来存储上传的文件,如下所示:
var file = Request.Files[0];
using (var tempStream = new MemoryStream())
{
file.InputStream.CopyTo(tempStream);
tempStream.Position = 0;
_departmentAppService.Import(tempStream);
}
希望对您有所帮助。
我正在尝试将流从 HttpPostedFileBase 传递到服务方法而不保存到磁盘。
//Controller Action
[HttpPost]
public void Import()
{
if (Request.Files.Count == 0)
return new HttpStatusCodeResult(404);
var file = Request.Files[0];
_departmentAppService.Import(file.InputStream);
}
//Service Method
public string Import(Stream stream)
{
var excelFile = ExcelFile.Load(stream, LoadOptions.CsvDefault);
var worksheet = excelFile.Worksheets[0];
var jsonString = worksheet.ToJsonString();
return jsonString;
}
流传给方法时抛出"Property accessor 'ReadTimeout' on object 'System.Web.HttpInputStream' threw the following exception:'Timeouts are not supported on this stream.'"的错误。有惯用的方法吗?
我无法重现此问题,因此我无法检查您获得的堆栈跟踪,但我认为您超时了,因为您正在处理大型 CSV 文件,在这种情况下,我会尝试增加 'executionTimeout' 在 web.config.
您也可以尝试使用临时内存流来存储上传的文件,如下所示:
var file = Request.Files[0];
using (var tempStream = new MemoryStream())
{
file.InputStream.CopyTo(tempStream);
tempStream.Position = 0;
_departmentAppService.Import(tempStream);
}
希望对您有所帮助。