看起来很简单,但我没有在ServiceStack中看到任何专注于上传方面的测试,一切似乎都集中在将文件流式传输到浏览器上。我不关心将使用它的各种客户端,它都在受控环境中,所以这个technique看起来很有趣。我在哪里可以找到有关在ServiceStack中上传大型csv文件,然后在我的服务中使用所述文件(即将数据存入数据库)的更多信息?
果然,在挖了一点后我确实看到了上传测试,但这些似乎专注于将文件保存到磁盘,这是唯一可用的选项,我希望能够流式传输到内存并以这种方式解析文件。
谢谢你, 斯蒂芬
答案 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文件。