ReadAllBytes 用于将文件上传到 Google 驱动器 Windows Phone 8 c#
ReadAllBytes for uploading file to Google Drive in Windows Phone 8 c#
我已经编写了上传过程中的授权部分,但我不知道如何在授权后上传文件。我想上传图片,但我会先尝试使用 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'
。那么,我该如何读取所有字节?
有什么想法吗?谢谢。
如果您需要在 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
或 IsolatedStorage
编辑:-
有关您的更多信息,以下是如何将文件读取到 MemoryStream:
using (MemoryStream ms1 = new MemoryStream())
{
using (FileStream file = new FileStream("document.txt", FileMode.Open, FileAccess.Read))
{
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
ms1.Write(bytes, 0, (int)file.Length);
}
}
如需更多代码,请在此处简要介绍您的场景。希望对您有所帮助。
Windows Phone(和商店应用程序)使用存储文件,因此您必须使用不同于 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);
}
我已经编写了上传过程中的授权部分,但我不知道如何在授权后上传文件。我想上传图片,但我会先尝试使用 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'
。那么,我该如何读取所有字节?
有什么想法吗?谢谢。
如果您需要在 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
或 IsolatedStorage
编辑:-
有关您的更多信息,以下是如何将文件读取到 MemoryStream:
using (MemoryStream ms1 = new MemoryStream())
{
using (FileStream file = new FileStream("document.txt", FileMode.Open, FileAccess.Read))
{
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
ms1.Write(bytes, 0, (int)file.Length);
}
}
如需更多代码,请在此处简要介绍您的场景。希望对您有所帮助。
Windows Phone(和商店应用程序)使用存储文件,因此您必须使用不同于 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);
}