【问题标题】:Upload to Google Drive using API C# from web user使用 API C# 从网络用户上传到 Google Drive
【发布时间】:2016-09-26 19:48:08
【问题描述】:

最终,我尝试通过 MVC .NET 网站将用户文件系统中的文档上传到使用服务帐户的 Google Drive。

我不确定我是否正在实施适当的设计来完成上传,但我对要上传的文件的路径感到困惑。

网络

@Html.TextBox("file", "file", new { type = "file", id = "fileUpload" })

控制器

public ActionResult GoogleDriveList(GoogleDrivePageVM vm, HttpPostedFileBase file)

File _file = new File();

var _uploadFile = System.IO.Path.GetFileName(file.FileName);
byte[] byteArray = System.IO.File.ReadAllBytes(_uploadFile);

ReadAllBytes 语句发生错误。它找不到文件“C:\Program Files (x86)\IIS Express\Map of Universe.txt”。文件名正确但路径不正确。

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

... Google Drive 文件放在这里

然后从流中上传文件。

FilesResource.InsertMediaUpload request = _service.Files.Insert(body, stream, body.MimeType);
request.Upload();

那么,我是否使用 HTML 文件帮助程序走在正确的道路上?如果是这样,让路径正常工作的诀窍是什么?此外,我希望能够支持最大 500 MB 的文件大小(如果有区别的话)。

【问题讨论】:

  • 如何解析字符串的文件?如果将文件输入到文本框中,可能需要验证字符串的格式是否正确,以便 ReadAllBytes 正常工作。
  • 用户从看起来像 windows 文件资源管理器对话框的文件中选择一个文件。没有输入文件名的选项。文件名显示“Map of Universe.txt”,这是我选择的文件,但 ReadAllBytes 语句包含虚假路径。
  • 请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标记。

标签: c# asp.net-mvc google-drive-api google-api-dotnet-client


【解决方案1】:

如果您从用户选择的 Windows 文件资源管理器对话框中获取文件名,那么您不应该使用下面的内容,因为只会将没有路径的文件名剥离到您的上传文件变量中,我假设虚假路径在哪里您正在运行代码,因此 ReadAllBytes 正在尝试使用文件名从该路径读取

var _uploadFile = System.IO.Path.GetFileName(file.FileName)

只需更改,使其具有您需要在 ReadAllBytes 中使用的完整路径和文件名

var _uploadFile = file.FileName

【讨论】:

  • 仍然找不到文件并使用虚假路径查找它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多