#python #flask #google-cloud-platform #google-cloud-storage #bucket
#питон #flask #google-облачная платформа #google-облачное хранилище #ведро
Вопрос:
Я пытаюсь найти способ сохранить изображение, загруженное пользователем на сервер flask, в хранилище Google. Это моя попытка загрузить изображение. Это терпит неудачу.
@app.route("/upload-image", methods=["GET", "POST"])
def upload_image():
if request.method == "POST":
try:
if request.files:
image = request.files["image"]
readImg = image.read()
content = bytes(readImg)
client = storage.Client().from_service_account_json(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])
print('1)')
bucket = storage.Bucket(client, "uploaded-usrimg")
print('2)')
file_blob = bucket.blob(content)
print('3)')
return render_template('result.html', request=result.payload[0].display_name)
# return render_template('homepage.html')
except Exception as e:
print('error creating image data')
print(e)
Мой большой двоичный объект (изображение) не загружается в мою корзину.
Я получаю эту ошибку:
127.0.0.1 - - [13/Jan/2021 18:40:58] "POST /upload-image HTTP/1.1" 500 -
1)
2)
error creating image data
'utf-8' codec can''t decode byte 0x89 in position 0: invalid start byte
[2021-01-13 18:41:11,663] ERROR in app: Exception on /upload-image [POST]
Traceback (most recent call last):
File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/flask/app.py", line 1953, in full_dispatch_request
return self.finalize_request(rv)
File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/flask/app.py", line 1968, in finalize_request
response = self.make_response(rv)
File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/flask/app.py", line 2098, in make_response
"The view function did not return a valid response. The"
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
127.0.0.1 - - [13/Jan/2021 18:41:11] "POST /upload-image HTTP/1.1" 500 -
Есть идеи, как устранить эту ошибку? Или другой способ загрузки в Google bucket? Большое спасибо.
Комментарии:
1. проверьте это gist.github.com/merqurio/c0b62eb1e1769317907f
2. Каждый раз, когда я пытаюсь импортировать google.appengine, я сталкиваюсь с ошибкой, связанной с модулем: (Спасибо за предложение!
Ответ №1:
Я полагаю, что это сообщение об ошибке связано с тем, как вы обрабатываете изображение. В вашем коде readImg = image.read()
вы декодируете изображение в соответствии с правилами UTF-8 и сталкиваетесь с последовательностью байтов, которая не разрешена в кодировке UTF-8.
Вам нужно открыть изображение с b
помощью в open()
режиме, чтобы файл считывался как двоичный, а содержимое оставалось в виде байтов.
with open(path, 'rb') as f:
contents = f.read()
Если вы использовали разные типы файлов, byte XXXX in position 0
это также может означать, что файл закодирован неправильно, поэтому, например, вы можете попробовать это или подобное:
open(path, encoding='utf-16') as f:
contents = f.read()