使用Google Drive REST API v3和Angular 2上传并命名文件

使用Google Drive REST API v3和Angular 2上传并命名文件,rest,angular,google-api,google-drive-api,angular2-services,Rest,Angular,Google Api,Google Drive Api,Angular2 Services,我正在使用Angular 2中的Drive REST Api v3创建一个Google驱动器服务。大部分功能都已到位:查看文件、下载、创建等。。但是我找不到如何命名文件(无论是在创建文件还是更新文件时) 我正在使用以下文档页面:和。他们说文件名应该是请求主体的一部分。我的谷歌硬盘服务的相关代码如下 createFile(name :string, content :string) :Promise<Object> { let headers = new Headers({

我正在使用Angular 2中的Drive REST Api v3创建一个Google驱动器服务。大部分功能都已到位:查看文件、下载、创建等。。但是我找不到如何命名文件(无论是在创建文件还是更新文件时)

我正在使用以下文档页面:和。他们说文件名应该是请求主体的一部分。我的谷歌硬盘服务的相关代码如下

createFile(name :string, content :string) :Promise<Object> {
    let headers = new Headers({
      'Content-Type': 'text/markdown',
      'Authorization': 'Bearer ' + this.token,
      'name': name //TODO name not working!
    });
    let options = new RequestOptions({ headers: headers }); // Create a request option

    return this.http
      .post('https://www.googleapis.com/upload/drive/v3/files' + '?uploadType=multipart', content, options)
      .toPromise();
  }

updateFile(id :string, content :string, name :string) :Promise<Object> {
    let headers = new Headers({
      'Content-Type': 'text/markdown',
      'Authorization': 'Bearer ' + this.token,
      'id': id,
      'name': name //TODO name not working!
    }); //generate headers
    let options = new RequestOptions({ headers: headers }); // Create a request option

    return this.http
      .patch('https://www.googleapis.com/upload/drive/v3/files/' + id + '?uploadType=multipart', content, options)
      .toPromise();
  }
createFile(名称:string,内容:string):承诺{
让标题=新标题({
“内容类型”:“文本/标记”,
“授权”:“持有人”+此.token,
“名称”:名称//待办事项名称不起作用!
});
let options=newrequestoptions({headers:headers});//创建请求选项
返回此文件。http
.post('https://www.googleapis.com/upload/drive/v3/files“+”?uploadType=multipart',内容,选项)
.toPromise();
}
updateFile(id:string,content:string,name:string):承诺{
让标题=新标题({
“内容类型”:“文本/标记”,
“授权”:“持有人”+此.token,
“id”:id,
“名称”:名称//待办事项名称不起作用!
});//生成标题
let options=newrequestoptions({headers:headers});//创建请求选项
返回此文件。http
.patch('https://www.googleapis.com/upload/drive/v3/files/“+id+”?uploadType=multipart',内容,选项)
.toPromise();
}
总结文件的创建和更新很好(包括内容),但命名和重命名文件根本不起作用


谢谢您的帮助。

您正在尝试使用http头设置名称。这是错误的。我无法理解您是如何认为这样做的,因此您需要返回并重新阅读驱动器API文档


简而言之,
name:“name”
应该是在请求体中传递的JSON对象,而不是http头中传递的JSON对象。

尝试将名称放置在请求体中,而不是请求头中,如中所述:

请求主体
  • 在请求正文中,提供具有以下属性的文件资源作为元数据。有关详细信息,请参阅上的文档
要测试它,请尝试使用帮助您以交互方式浏览各种Google API

样本请求:

POST https://www.googleapis.com/drive/v3/files?key={YOUR_API_KEY}

{
"name": "My File"
}
答复:

200

{

"kind": "drive#file",
"id": "fileID",
"name": "My File"
}
还有一个相关的例子解释了如何通过API将文件插入到Google Drive


希望这能有所帮助。

我也遇到了这个问题。我认为有3种解决方案:

  • 对文件元数据和实际文件使用具有不同标题的
    多部分上载
    。我自己被困在那里,没有发现如何在Angular 2+中为单独的请求头添加边界

  • 在两个请求中上载文件。首先用元数据创建空文件(响应将提供文件的id),然后实际“更新”文件

  • 使用
    可恢复上传
    。第一个请求是“设置元数据”(甚至不会创建空文件),并获取“特殊链接”,在该链接中发送上传实际文件的请求。这种方法还有其他一些特性,比如分块上传

  • 这里是到Angular 2和DRIVE REST API V3中实现可恢复上传的另一个问题的链接


    我希望它可能有用。

    什么是允许重命名文件的api?你是什么意思?谢谢,现在有意义了。