Размер файла равен нулю при загрузке на Google Drive с Python и Flask - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь объединить Google Drive API и Flask для загрузки файлов на Google диск.Для загрузки файлов я использую следующий код:

@app.route('/upload_google', methods=['GET','POST'])
def upload_google():
    if not google.authorized:
        return redirect(url_for("google.login"))
    file = request.files['myfile']
    filename = secure_filename(file.filename)
    para = {
        "name": filename,
        'mimeType':'image/jpeg',
    }
    files = {
        'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
        'file': request.files['myfile']
    }
    uploaden = google.post(
        "upload/drive/v3/files",
        files=files,
    )
    print (uploaden.text)
    return('upload  succesfull')

В шаблоне HTML я использую следующую форму:

<form method=POST enctype=multipart/form-data action="upload_google">
<input type=file name=myfile>
<input type=submit>
</form>

Загрузка файлов в Google работает, единственная проблема заключается в том, что онизагружены без размера файла, и я не могу понять, почему.

1 Ответ

0 голосов
/ 12 сентября 2018

Проблема решена путем сохранения файла сначала локально, а затем открыть его в шапке:

@app.route('/upload_google', methods=['GET','POST'])
def upload_google():
    if not google.authorized:
        return redirect(url_for("google.login"))
    file = request.files['myfile']
    filename = secure_filename(file.filename)
    UPLOAD_FOLDER = ''
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
    para = {'name': filename,
            'mimeType': mimetype}
    files = {'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),'file':(filename, open(UPLOAD_FOLDER+'/'+filename,'rb'), mimetype,{'Expires': '0'})}
    r = google.post('https://www.googleapis.com/upload/drive/v3/files',files=files)
    return redirect("/drive")
...