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.構成。

また、次のような一時メモリ ストリームを使用して、アップロードされたファイルを保存することもできます。

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 に答える