我已经设置了一个支持 FILESTREAM 的 SQL 数据库,并试图通过 WebAPI 将使用 SqlFileStream 从数据库中检索到的文件流式传输到浏览器。
由于某种原因它不起作用,但我没有收到正确的错误消息。浏览器只是中止了连接,Fiddler 也没有显示任何有用的东西,而且在 VS 中似乎没有抛出任何错误。
public HttpResponseMessage Get(Guid id)
{
if(id == null || id == Guid.Empty)
return Request.CreateResponse(HttpStatusCode.BadRequest);
try
{
FileStreamContext fsc = null;
Document document = null;
using(var transaction = new TransactionScope())
using (var db = new MyEntities())
{
try
{
fsc = db.Database.SqlQuery<FileStreamContext>("SELECT [File].PathName() AS InternalPath, GET_FILESTREAM_TRANSACTION_CONTEXT() AS TransactionContext FROM Document WHERE id={0}", id).First();
}
catch (Exception e)
{
Debug.Print(e.ToString());
}
document = db.Documents.Where(doc => doc.ID == id).Single();
var fileStream = new SqlFileStream(fsc.InternalPath, fsc.TransactionContext, FileAccess.Read);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(fileStream);
//response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
//response.Content.Headers.ContentDisposition.FileName = document.FileName;
response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(document.ContentType);
return response;
}
}
catch (Exception e)
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
我怀疑 TransactionScope 提前关闭可能是个问题?不知道为什么我没有收到任何错误消息。
通过 WebApi 流式传输 SqlFileStream 的正确方法是什么?