C# 来自HTTPPostedFileBase的MVC/WebApi流
我正在尝试将流从HttpPostedFileBase传递到服务方法,而不保存到磁盘C# 来自HTTPPostedFileBase的MVC/WebApi流,c#,asp.net-mvc,gembox-spreadsheet,asp.net-boilerplate,C#,Asp.net Mvc,Gembox Spreadsheet,Asp.net Boilerplate,我正在尝试将流从HttpPostedFileBase传递到服务方法,而不保存到磁盘 //Controller Action [HttpPost] public void Import() { if (Request.Files.Count == 0) return new HttpStatusCodeResult(404); var file = Request.Files[0]; _department
//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;
}
对象“System.Web.HttpInputStream”上的属性访问器“ReadTimeout”出现错误,引发了以下异常:“此流不支持超时”。“在将流传递给方法时引发。有一种惯用的方法可以做到这一点吗?我无法重现此问题,因此无法检查您获得的堆栈跟踪,但我认为您超时了,因为您正在处理大型CSV文件,在这种情况下,我会尝试增加web.config中的“executionTimeout” 您还可以尝试使用临时内存流来存储上载的文件,如下所示:
var file = Request.Files[0];
using (var tempStream = new MemoryStream())
{
file.InputStream.CopyTo(tempStream);
tempStream.Position = 0;
_departmentAppService.Import(tempStream);
}
希望这能有所帮助。谢谢您的回复。我仍然收到相同的错误:对象“System.IO.MemoryStream”上的属性访问器“ReadTimeout”引发了以下异常:“此流不支持超时”。堆栈跟踪是:在System.IO.stream.get\u ReadTimeout()文件为1KB。您还有其他建议吗?很遗憾,没有,但是你能暂时上传一个VS测试项目到某个地方,它会重现你的问题,这样我就可以调查它了吗?谢谢你的帮助。经过数小时的测试,这似乎与我们正在使用的Asp.Net锅炉板框架有关。当我们更新到最新版本()并更改了大量代码以匹配时,这个错误似乎消失了。我非常感谢你的帮助。