我应该如何 return 使用 ServiceStack 的大文本文件?
How should I return a large text file using ServiceStack?
我有一个 Web 服务需要 return 一个大的文本文件,以便在客户端上进行 AJAX 调用。对于初学者,我有一个有效的文本文件路径:
var fileName = <file on server>
我知道文件名是有效的,因为我可以在服务器上将其打开为 FileStream
。
我已经尝试了 ServiceStack and returning a stream 中推荐的一些不同方法,但我似乎无法让它发挥作用。
我应该return做什么?我最好的猜测是:
var stream = File.Open(fileName, ...);
return HttpResult(stream, "text/plain"){ AllowPartialResponse = false };
但这行不通;响应是一个简单的 JSON 对象。使用 FileInfo
和 asAttachment
选项也不起作用;它只是return编辑了一堆文件信息。
目标是 JavaScript 客户端能够接收字符串形式的内容:
api.getFile({...}).then( function (result) {
// result has the file contents
});
正确的做法是什么?
更新:
我最终使用这种流方法让它工作:
using( var fs = File.OpenRead( fileName ) )
{
fs.CopyTo( Response.OutputStream );
}
我不完全理解为什么其他一些方法不起作用,但它们似乎与 1) FileInfo 及其在服务器上的行为有关,2) 我的开发环境中的文件权限,以及3) "partial content" 问题和异常。 File.Exists() returns false, but not in debug 讨论了一个让我失望的问题。
我刚刚 committed a Service that returns a text file 并且 HttpResult API 按预期工作:
[Route("/textfile-test")]
public class TextFileTest
{
public bool AsAttachment { get; set; }
}
public class MyServices : Service
{
public object Any(TextFileTest request)
{
return new HttpResult(new FileInfo("~/textfile.txt".MapHostAbsolutePath()),
asAttachment:request.AsAttachment);
}
}
您可以使用或不使用 asAttachment
选项进行测试:
- http://test.servicestack.net/textfile-test
- http://test.servicestack.net/textfile-test?asAttachment=true
您也可以直接访问文本文件(即没有服务):
此外,different ways to return an Image response 也应该适用于文本文件。
我有一个 Web 服务需要 return 一个大的文本文件,以便在客户端上进行 AJAX 调用。对于初学者,我有一个有效的文本文件路径:
var fileName = <file on server>
我知道文件名是有效的,因为我可以在服务器上将其打开为 FileStream
。
我已经尝试了 ServiceStack and returning a stream 中推荐的一些不同方法,但我似乎无法让它发挥作用。
我应该return做什么?我最好的猜测是:
var stream = File.Open(fileName, ...);
return HttpResult(stream, "text/plain"){ AllowPartialResponse = false };
但这行不通;响应是一个简单的 JSON 对象。使用 FileInfo
和 asAttachment
选项也不起作用;它只是return编辑了一堆文件信息。
目标是 JavaScript 客户端能够接收字符串形式的内容:
api.getFile({...}).then( function (result) {
// result has the file contents
});
正确的做法是什么?
更新:
我最终使用这种流方法让它工作:
using( var fs = File.OpenRead( fileName ) )
{
fs.CopyTo( Response.OutputStream );
}
我不完全理解为什么其他一些方法不起作用,但它们似乎与 1) FileInfo 及其在服务器上的行为有关,2) 我的开发环境中的文件权限,以及3) "partial content" 问题和异常。 File.Exists() returns false, but not in debug 讨论了一个让我失望的问题。
我刚刚 committed a Service that returns a text file 并且 HttpResult API 按预期工作:
[Route("/textfile-test")]
public class TextFileTest
{
public bool AsAttachment { get; set; }
}
public class MyServices : Service
{
public object Any(TextFileTest request)
{
return new HttpResult(new FileInfo("~/textfile.txt".MapHostAbsolutePath()),
asAttachment:request.AsAttachment);
}
}
您可以使用或不使用 asAttachment
选项进行测试:
- http://test.servicestack.net/textfile-test
- http://test.servicestack.net/textfile-test?asAttachment=true
您也可以直接访问文本文件(即没有服务):
此外,different ways to return an Image response 也应该适用于文本文件。