我编写了上传过程的授权部分,但我不知道如何在授权后上传文件。我想上传图片,但首先我会尝试使用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'
。那么,我如何阅读所有字节?
有什么想法吗?谢谢。
答案 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);
}