gpt4 book ai didi

c# - 使用 MvvmCross 加载本地存储中的文件

转载 作者:行者123 更新时间:2023-11-30 22:23:46 28 4
gpt4 key购买 nike

目前,我正在尝试使用可移植库中的 Web 服务从服务器上传文件。对于每个文件,我都这样做:

WebRequest request = WebRequest.Create("http://localhost:49364/" + url);

request.BeginGetResponse((aResult) =>
{
var retour = aResult.AsyncState as WebRequest;
WebResponse reponse = retour.EndGetResponse(aResult);
callback(reponse);
}, request);

在我的回调方法中,我做了这个:

byte[] bytes;
string currentFileName = fileName;
string categorie = currentFileName.Split('/').ElementAt(0);
string dir = currentFileName.Split('/').ElementAt(1);

using (var reader = new BinaryReader(reponse2.GetResponseStream()))
{
bytes = new byte[reponse2.ContentLength];
reader.Read(bytes, 0, (int)reponse2.ContentLength);
}
fileService.EnsureFolderExists(categorie);
fileService.EnsureFolderExists(fileService.PathCombine(categorie, dir));
fileService.WriteFile(currentFileName, bytes);

我将整个文件作为一个字节数组。但是,使用 winRT,写入文件很快停止,我的本地文件不完整。如果我尝试只上传一个文件,写入也会停止。但是,如果我尝试使用 Silverlight(我将 MvvmCross 扩展到 Silverlight),那么编写就完成了。我还没有测试 MonoDroid 和 MonoTouch。

所以,我的问题是:为什么写作停止了?

最佳答案

我已经查看了 MvxBlockingWinRTFileStoreService.cs 中 WriteFile 的代码。而且我看不到任何明显的错误。

为了对此进行测试,我刚刚使用 https://gist.github.com/4016898 编写了一个快速的独立 WinRT 测试应用程序.

这样就完美保存了37kB的Bing主页文件。它也适用于您的服务器吗?

在这次测试之后,我的猜测是您的网络传输代码中可能存在一些错误 - 甚至可能在 localhost 服务中。但是,该错误仍有可能存在于 StorageFile 保存中。

一些问题:

  • 您能否添加额外的跟踪以找出在下载的每个阶段报告的数据缓冲区长度?

  • 您能否调整上面的简单测试工具以使其显示相同的结果?


一个可能的候选者是:

您使用 ContentLength 作为流长度?您确定使用的长度正确吗?

例如如果您启用了 GZip 压缩,那么 ContentLength 将为您提供传输的压缩数据的长度,而不是数据本身的长度 - 请参阅 content-length when using http compression

我想得越多,这对我来说就越有意义 - Silverlight 将使用浏览器堆栈,与 WinRT 堆栈相比,它具有不同的 HTTP 接受 header 。


一些好消息是 async/await 很快就会出现在 MonoTouch 和 MonoDroid 中——当它们出现时,我将尝试使文件 API 全部作为 async 和 await 可用。

关于c# - 使用 MvvmCross 加载本地存储中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230028/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com