c# - 将文件上传到谷歌驱动器导致错误请求错误消息
问题描述
我正在尝试使用我的 asp.net MVC 项目将图像文件上传到 Google 驱动器。我正在使用 Google drive v2 api,但无法上传文件。
我已经用 PostMan 对此进行了测试,效果很好
在邮递员工作
我的代码
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://www.googleapis.com");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + Token);
client.DefaultRequestHeaders.Add("Accept", "application/json");
using (var content = new MultipartFormDataContent())
{
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filePath));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("file")
{
FileName = "index.jpg"
};
content.Add(fileContent);
var requestUri = "/upload/drive/v2/files/" + FileId;
var result = client.PutAsync(requestUri, content).Result;
}
}
错误:
我的代码返回一个错误的请求错误,我不知道为什么。
解决方案
我强烈建议您使用Google .net 客户端库,我还建议您切换到使用Google Drive v3。
假设您同意上述内容
首先,您需要创建一个驱动服务,您对 api 的所有调用都将通过它。
// Create the Drive service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential
});
假设您的文件尚不存在于 Google 驱动器上,您将执行 file.create。您需要做的第一件事是为文件创建元数据。
// Upload file Metadata
var fileMetadata = new Google.Apis.Drive.v3.Data.File()
{
Name = "Test hello uploaded.txt",
Parents = new List() {"10krlloIS2i_2u_ewkdv3_1NqcpmWSL1w"}
};
上传后,您可以上传文件流
string uploadedFileId;
// Create a new file on Google Drive
await using (var fsSource = new FileStream(UploadFileName, FileMode.Open, FileAccess.Read))
{
// Create a new file, with metadata and stream.
var request = service.Files.Create(fileMetadata, fsSource, "text/plain");
request.Fields = "*";
var results = await request.UploadAsync(CancellationToken.None);
if (results.Status == UploadStatus.Failed)
{
Console.WriteLine($"Error uploading file: {results.Exception.Message}");
}
// the file id of the new file we created
uploadedFileId = request.ResponseBody?.Id;
}
如果文件实际上已经存在,您将需要执行文件 .update 而不是 file.create。
我有一篇关于如何使用 C# .net 将文件上传到 Google 驱动器的完整博客文章 如何使用 C# .net将文件上传到 Google 驱动器tutial 的授权方法是您需要使用web-applications-asp 的服务帐户。 net-mvc这个是为了你的授权。
如果宁愿视频教程,我也有关于该主题的视频Google Drive API V3:使用服务帐户创建、更新和上传文件的完整指南
你的代码
如果你想知道你的代码有什么问题,那么你可能想看看 PutAsync 和 PostAsync 之间的差异。
var result = client.PostAsync(requestUri, content).Result;
推荐阅读
- python-3.x - 添加shebang导致没有这样的文件或目录错误
- android - React-Native:react-native-fast-image 不能与 react-native 一起正常工作,它会出错
- python - 从亚马逊刮掉标签
- flutter - How to do the design and also do increment and decrement for specific item in flutter
- php - 将运行用户从 nt authority\system 更改为 AD 用户 - Windows 上的 Apache
- java - 检查权限时出现 NullPointerException
- javascript - PixiJS 随机旋转和下降速度
- node.js - redis宕机时如何绕过缓存?
- asp.net - 如何解决此错误:移动到另一台服务器后,密钥在指定状态下无效
- c# - 如何在 Web 方法中返回参数化构造函数列表?