我有一個Web服務,需要返回一個大的文本文件在客戶端上的AJAX調用。首先,我要對文本文件的有效路徑:如何使用ServiceStack返回大型文本文件?
var fileName = <file on server>
我知道文件名是有效的,因爲我可以將服務器作爲FileStream
上打開它。
我已經嘗試了ServiceStack and returning a stream中推薦的一些不同方法,但似乎無法使其工作。
我應該返回什麼?我最好的猜測是:
var stream = File.Open(fileName, ...);
return HttpResult(stream, "text/plain"){ AllowPartialResponse = false };
但這並不奏效;該響應是一個簡單的JSON對象。使用FileInfo
和asAttachment
選項也不起作用;它只是返回了一堆文件信息。
的目標是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)「部分內容」問題和異常。 File.Exists() returns false, but not in debug討論了一個拋出我的問題之一。
感謝您的快速回復。無論文件的大小如何,這裏是我得到的錯誤:https://gist.github.com/sethlivingston/fc7236c59d4f11a4124e。有任何想法嗎? – Seth
@Seth你能直接通過url訪問文件嗎?我可以讓你更新你的問題,以包括返回這個錯誤的原始HTTP請求和響應頭?您可以通過Chrome的WebInspector或Fiddler獲取此信息。 – mythz
更新了要點:https://gist.github.com/sethlivingston/fc7236c59d4f11a4124e。讓我知道你是否需要更多。 – Seth