尝试复制文件夹时,Google API和Django出现400错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试复制文件夹时,Google API和Django出现400错误相关的知识,希望对你有一定的参考价值。

我正在尝试使用谷歌api,python和Django复制一个文件夹,并设法使用改编的代码找到here

但是当我尝试复制文件夹时,我得到:

<HttpError 400请求https://www.googleapis.com/drive/v3/files/FileId/copy?alt=json时返回“Bad Request”>

import os
import logging
import httplib2
from pprint import pprint
from googleapiclient.discovery import build
from django.contrib.auth.decorators import login_required
from django.conf import settings
from django.http import HttpResponseBadRequest
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from django.http import JsonResponse
from django.db.utils import IntegrityError
from .models import Entries, CredentialsModel
from oauth2client.contrib import xsrfutil
from oauth2client.client import flow_from_clientsecrets
from oauth2client.contrib.django_util.storage import DjangoORMStorage
from .pipeline_lib import pipeline_lib as pipeline

FLOW = flow_from_clientsecrets(
    settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
    scope=['https://www.googleapis.com/auth/drive',
           'https://www.googleapis.com/auth/drive.file',
           'https://www.googleapis.com/auth/drive.appdata',
           'https://www.googleapis.com/auth/drive.metadata'],
    redirect_uri='http://somedomain.com:8000/workflow/oauth2callback')

@login_required
def index(request):
    storage = DjangoORMStorage(CredentialsModel, 'id', request.user, 'credential')
    credential = storage.get()
    if credential is None or credential.invalid == True:
        FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY,
                                                       request.user)
        authorize_url = FLOW.step1_get_authorize_url()
        return HttpResponseRedirect(authorize_url)
    else:
        http = httplib2.Http()
        http = credential.authorize(http)
        service = build("drive", "v3", http=http)
        newfile = {'title': 'New Master 123', 'parents': [{'id': 'folderId'}]}
        result = service.files().copy(fileId='folderId',body=newfile).execute()
        pprint(result)
        # results = service.files().list(pageSize=10,fields="nextPageToken, files(id, name)").execute()
        # items = results.get('files', [])
        # if not items:
        #     print('No files found.')
        # else:
        #     print('Files:')
        #     for item in items:

       #         print('{0} ({1})'.format(item['name'], item['id']))
        return HttpResponse("Hello, world. You're at the index.")

@login_required
def auth_return(request):
    credential = FLOW.step2_exchange(request.GET)
    storage = DjangoORMStorage(CredentialsModel, 'id', request.user, 'credential')
    storage.put(credential)
    return HttpResponseRedirect("/workflow")
答案

问题是我试图复制一个文件夹,显然文件()。复制不能在一个文件夹上运行,至少不是一个有孩子的文件夹,但我还没有测试过警告。

替换了我想要在同一父文件中使用pdf的文件ID复制的文件夹的id后,该函数运行时出现错误。

编辑 - 现在我已经为自己想出了这个,我偶然发现了一个堆栈溢出帖子,解释了为什么会这样。 In Google Drive SDK how do you copy a folder?

以上是关于尝试复制文件夹时,Google API和Django出现400错误的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 Google Maps API? [复制]

如何在 CSS 文件中调用 Google API 字体? [复制]

Google Maps Places API - 如何获取地名? [复制]

gsutil api 谷歌存储近线

尝试使用 Google Directory API 和服务帐户身份验证时收到错误“未授权访问此资源/api”

Google Drive API v3-将文档转换为pdf