1

我正在尝试将流从 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;
    }

将流传递给方法时抛出“对象'System.Web.HttpInputStream'上的属性访问器'ReadTimeout'错误引发以下异常:'此流不支持超时。'” 。有没有一种惯用的方法来做到这一点?

4

1 回答 1

1

我无法重现此问题,因此无法检查您获得的堆栈跟踪,但我认为您会超时,因为您正在处理大型 CSV 文件,在这种情况下,我会尝试增加 web.xml 中的“executionTimeout”。配置。

您也可以尝试使用临时内存流来存储上传的文件,如下所示:

var file = Request.Files[0];
using (var tempStream = new MemoryStream())
{
    file.InputStream.CopyTo(tempStream);
    tempStream.Position = 0;
    _departmentAppService.Import(tempStream);
}

我希望这有帮助。

于 2016-08-31T10:33:32.390 回答