将csv文件上传到ServiceStack并解析它的最快方法是什么?

时间:2014-12-16 21:04:48

标签: csv servicestack

看起来很简单,但我没有在ServiceStack中看到任何专注于上传方面的测试,一切似乎都集中在将文件流式传输到浏览器上。我不关心将使用它的各种客户端,它都在受控环境中,所以这个technique看起来很有趣。我在哪里可以找到有关在ServiceStack中上传大型csv文件,然后在我的服务中使用所述文件(即将数据存入数据库)的更多信息?

果然,在挖了一点后我确实看到了上传测试,但这些似乎专注于将文件保存到磁盘,这是唯一可用的选项,我希望能够流式传输到内存并以这种方式解析文件。

谢谢你, 斯蒂芬

1 个答案:

答案 0 :(得分:3)

一种方法是在processing uploaded files的HttpBenchmarks示例项目中,它将Apache Benchmark反序列化为类型化的POCO,它支持上传多个单独的文件以及在.zip个文件中压缩的多个文件:

public object Post(UploadTestResults request)
{
    foreach (var httpFile in base.Request.Files)
    {
        if (httpFile.FileName.ToLower().EndsWith(".zip"))
        {
            // Expands .zip files
            using (var zip = ZipFile.Read(httpFile.InputStream))
            {
                var zipResults = new List<TestResult>();
                foreach (var zipEntry in zip)
                {
                    using (var ms = new MemoryStream())
                    {
                        zipEntry.Extract(ms);
                        var bytes = ms.ToArray();
                        zipResults.Add(new MemoryStream(bytes).ToTestResult());
                    }
                }
                newResults.AddRange(zipResults);
            }
        }
        else
        {
            // Converts
            var result = httpFile.InputStream.ToTestResult();
            newResults.Add(result);
        }
    }
    ...
}

在此示例中,您将更改ToTestResult() extension method以将CSV流反序列化为类型化的POCO。

  

ServiceStack本身没有内置的CSV解串器,因此您需要找到一个.NET CSV Deserializer库或手动解析上传的CSV文件。