用于在Windows Phone 8中将文件上传到Google云端硬盘的ReadAllBytes c#

时间:2015-04-13 17:46:00

标签: c# windows-phone-8 windows-phone

我编写了上传过程的授权部分,但我不知道如何在授权后上传文件。我想上传图片,但首先我会尝试使用txt文件。

        Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
        body.Title = "My document";
        body.Description = "A test document";
        body.MimeType = "text/plain";

        byte[] byteArray = System.IO.File.ReadAllBytes("document.txt");
        System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

        FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
        request.Upload();

        Google.Apis.Drive.v2.Data.File file = request.ResponseBody;

我在互联网上找到了上面的代码。但看起来它只适用于Windows窗体,因为System.IO.File的文档并没有说它支持Windows Phone。我的问题始于ReadAllBytes。它说'System.IO.File' does not contain a definition for 'ReadAllBytes'。那么,我如何阅读所有字节?

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

如果您需要在API中传递MemoryStream,如下面的代码行所示,

FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");

那你为什么要转换成byte [] ..?您可以直接将文件转换为MemoryStream,如下所示:

var a = System.IO.File.OpenRead("document.txt");
System.IO.MemoryStream stream = new System.IO.MemoryStream();
a.CopyTo(stream);

然后您可以直接传递stream作为参数。

FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();

Google.Apis.Drive.v2.Data.File file = request.ResponseBody;

现在,我建议不要在Windows Phone 8中使用System.IO.File而是使用Windows.Storage.StorageFile,其中包含操作文件的正确实现,无论文件是在InstalledLocation还是在{{1 }}

修改: -

有关更多信息,请按以下步骤将文件读取到MemoryStream:

IsolatedStorage

有关更多代码,请在此处简要介绍您的情况。希望有所帮助..

答案 1 :(得分:1)

Windows Phone(和Store Apps)使用StorageFiles,因此您必须使用与System.IO不同的API。一旦有了StorageFile,System.IO命名空间中就会有扩展方法将StorageFile的IRandomAccessStream转换为所有示例使用的标准Stream。此处的示例代码使用OpenStreamForReadAsync来获取Stream。然后,您可以获取字节,或直接使用流。

var file = await ApplicationData.Current.LocalFolder.GetFileAsync("sample.txt");
using (var stream = await file.OpenStreamForReadAsync())
{
    //ideally just copy this stream to the the request stream
    //or use an HttpClient and request with StreamContent(stream).

    //if you need the bytes, you can do this
    var buffer = new byte[stream.Length];
    await stream.ReadAsync(buffer, 0, buffer.Length);
 }