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

问题描述 投票:0回答:1

我正在尝试使用谷歌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")
python django google-api google-drive-api drive
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.