После дня дальнейших испытаний я взломал его. Любой в будущем, ищущий решение для реализации Drive API Download с Flask, не стесняйтесь использовать мой код в качестве шаблона.
from __future__ import print_function
from flask import Flask, render_template, jsonify, request
import sys, requests, mimetypes
import pickle
import io
import os.path
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload, MediaFileUpload
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
@app.route('/drive_download')
def drive_download():
#CREDENTIALS
try:
SCOPES = ['https://www.googleapis.com/auth/drive']
##this might need to be swapped out to work with google picker authentication
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('client_secret.json', SCOPES) #Client_secret.json is what I called my credentials.json
creds = flow.run_local_server()
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
#DOWNLOAD FILE (I'm downloading a json file)
#Get file_id from AJAX call (this uses Picker to return the id of a file)
file_id = request.args.get("fileID")
drive_service = build('drive', 'v3', credentials=creds)
requests = drive_service.files().get_media(fileId = file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, requests)
done = False
while done is False:
status, done = downloader.next_chunk()
print("Download %d%%." % int(status.progress() * 100), file=sys.stderr)
fh.seek(0)
json = fh.read()
jsonRead = json.decode('utf-8') #decode from bytes into string
return jsonify(jsonRead) #Return file contents back to AJAX call
except Exception as e:
return(str(e))
У меня возникла эта проблема, потому что машина, на которой запущено приложение, не является доверенным для делегирования в домене через активный каталог. Если это приложение .net, работающее под идентификатором пула приложений DOMAIN_application.environment, например ... удостоверение не может выполнять вызовы SQL, если машина не является доверенной.
Только что попробовал:
H:> "C: \ Program Files \ Microsoft SQL Server \ 90 \ Tools \ Binn \ sqlcmd.exe" -S ". \ SQL2008" 1>
, и это работает ... (У меня есть каталог Microsoft SQL Server \ 100 \ Tools \ Binn на моем пути).
Все еще не уверен, почему версия SQLCMD для SQL Server 2008 не работает ..
Ваша ошибка буквально говорит о том, что "вы пытаетесь использовать аутентификацию Windows, но ваш логин не из доверенного домена". Что странно, потому что вы подключаетесь к локальной машине.
Возможно, вы вошли в Windows, используя локальную учетную запись, а не учетную запись домена? Убедитесь, что вы входите в систему с учетной записью домена, которая также является участником SQL Server в вашем экземпляре SQL2008.
Вы не передаете какие-либо учетные данные sqlcmd.exe
Таким образом, он пытается аутентифицировать вас с использованием учетных данных для входа в Windows, но у вас не должно быть настроек SQL Server для принятия этих учетных данных ...
Когда вы устанавливали его, вам нужно было указать пароль администратора сервера (для учетной записи sa
)
Попробуйте ...
sqlcmd.exe -U sa -P YOUR_PASSWORD -S ".\SQL2008"
для справки, подробнее здесь ...
Указываете ли вы имя пользователя и пароль для входа в систему? Какова именно ваша полная командная строка?
Если вы работаете на собственном компьютере, вы можете указать имя пользователя и пароль или использовать параметр -E
для входа в систему с учетными данными Windows (если они разрешены на вашем сервере SQL). установка).
Марк