2017-07-26 45 views
0

我尝试使用谷歌的API,Python和Django的一个文件夹中复制文件夹复制并设法得到的东西在这里找到https://developers.google.com/drive/v3/web/quickstart/python谷歌API和Django的让我在尝试

代码的调整工作的400错误

但是当我试图将一个文件夹中,我得到复制:https://www.googleapis.com/drive/v3/files/FileId/copy?alt=json返回“错误的请求”>

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") 

回答

1

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

将我想要复制的文件夹的id替换为同一个父文件中pdf的文件ID后,该函数运行出错。

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