Как изменить файлы, выбранные с помощью Google Picker, при использовании области Drive.file в Python?Python

Программы на Python
Ответить
Anonymous
 Как изменить файлы, выбранные с помощью Google Picker, при использовании области Drive.file в Python?

Сообщение Anonymous »

Я работаю над проектом Python Flask с API Google Picker и Drive, целью которого является предоставление пользователям возможности выбирать файлы на Google Диске и изменять их. Из соображений безопасности и контроля пользователей я использую область диска.файл вместо более широкой области диска.

Что работает:

  • Выбор Google:
    • Успешно внедрил Google Средство выбора, позволяющее пользователям выбирать файлы.
    • Правильное средство выбора. извлекает имя файла и идентификатор файла.
  • Сервер -Боковой код:
    • Когда файл выбран, его идентификатор отправляется в серверную часть Flask.
    • Попытайтесь получить файл с помощью Drive API.

Проблема:
При попытке получить содержимое файла с использованием идентификатора файла в моей серверной части я получаю следующую ошибку
[code]perl[/code]
[code]Copy[/code]
[code]Edit[/code]
[code][/code]
Похоже, у меня нет разрешения на доступ к файлу, хотя я использую область диска.file и явно выбираю файл через средство выбора.
Обзор кода:

HTML + JavaScript для средства выбора:

Код: Выделить всё

function onApiLoad() {
gapi.load('picker', { 'callback': onPickerApiLoad });
}

function onPickerApiLoad() {
const oauthToken = ''; // Retrieved from backend securely
const picker = new google.picker.PickerBuilder()
.addView(google.picker.ViewId.DOCS)
.setOAuthToken(oauthToken)
.setDeveloperKey('')
.setCallback(pickerCallback)
.build();
picker.setVisible(true);
}

function pickerCallback(data) {
if (data.action === google.picker.Action.PICKED) {
const file = data.docs[0];
console.log('File ID:', file.id);

// Send the file ID to the backend for further processing
fetch('/process_file', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ fileId: file.id }),
})
.then(response => response.json())
.then(data => console.log('Backend response:', data))
.catch(error => console.error('Error:', error));
}
}

Бэкэнд-код Flask:

Код: Выделить всё

from flask import Flask, request, jsonify
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
import io

app = Flask(__name__)

SCOPES = ['https://www.googleapis.com/auth/drive.file']  # Limited scope

@app.route('/process_file', methods=['POST'])
def process_file():
data = request.json
file_id = data.get('fileId')

credentials = Credentials.from_authorized_user_file('credentials.json', SCOPES)
service = build('drive', 'v3', credentials=credentials)

try:
# Attempting to fetch file metadata
file_metadata = service.files().get(fileId=file_id, fields='id, name, mimeType').execute()
print(f"File metadata: {file_metadata}")

# Example: Modify the file's content
request = service.files().get_media(fileId=file_id)
file_content = request.execute()

new_content = file_content.decode('utf-8') + '\nAppended Text.'
media = MediaIoBaseUpload(io.BytesIO(new_content.encode()), mimetype='text/plain')

updated_file = service.files().update(fileId=file_id, media_body=media).execute()
return jsonify({'status': 'success', 'updatedFile': updated_file})

except Exception as e:
return jsonify({'status': 'error', 'message': str(e)}), 500

Мои вопросы:

  • Как я могу убедиться, что выбранный файл с помощью Google Picker доступен с использованием области диска.file?
  • Нужно ли выполнить дополнительный шаг, чтобы связать выбор Picker с токен доступа к API Диска?
  • Может ли эта проблема быть связано с тем, как средство выбора генерирует идентификатор файла или как обрабатываются разрешения для выбранного файла?
Любая информация или предложения о том, как изменить файлы, выбранные с помощью Google Picker, при использовании области Drive.file, будут очень признательны.
Я уже пытался найти ответ, но нашел только один 2011 года, и он не дает никаких подробностей о том, как это сделать. это.
Что я пробовал:
Подтвердил, что идентификатор файла правильно передается из средства выбора в серверную часть.
Проверено, что токен OAuth и ключ API работают для других операций Drive API (например, создания файлов).
Прочитайте документацию для API Picker и Drive API, чтобы подтвердить, что область диска.файл должна разрешать доступ к файлы, явно выбранные пользователем.

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-scope-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»