我想通过 MVC4 Web 应用程序使用 GridFS 将存储在 MongoDB 中的图像通过我的 LAN 环境发送到浏览器,但是将图像发送到浏览器需要大约 500 毫秒。
谷歌浏览器网络检查员说大部分时间都花在“等待”期间,而实际的“接收”大约需要 1 毫秒。
MongoDB 服务器在本地网络中,那么发送一个 10kb 的图像需要这么长时间呢?我使用带有 Visual Studio 2012 的 Windows 8 和通过 NuGet 的官方 mongo-csharp-driver。
这是我的“文件”控制器的代码,它采用对象 ID 并发送此 ID 的数据:
public FileContentResult Files(string id)
{
var database = new MongoClient(MyConnection).GetServer().GetDatabase("MyDB");
var gridFs = new MongoGridFS(database);
var bsonId = new BsonObjectId(id);
var gridInfo = gridFs.FindOneById(bsonId);
var bytes = GridInfoToArray(gridInfo);
return new FileContentResult(bytes, "image/jpeg") { FileDownloadName = gridInfo.Name };
}
private byte[] GridInfoToArray(MongoGridFSFileInfo file)
{
using (var stream = file.OpenRead())
{
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, (int)stream.Length);
return bytes;
}
}
在视图中显示图像的代码:
<img src="@Url.Action("Files", new { id = objectIdOfMyImage) })"/>