#html #python-3.x #flask #pickle #pem
#HTML #python-3.x #flask #pickle #pem
Вопрос:
@app.route('/', methods=['POST'])
def upload_file():
if request.method == 'POST':
if 'files[]' not in request.files:
flash('No file part')
return redirect(request.url)
files = request.files.getlist('files[]')
...Processing my multiple uploaded files in Flask App...
...
b64_encoded_list = base64.b64encode(json_encoded_list)
print(b64_encoded_list)
## b64_encoded_list is a simple string ##
buffer = BytesIO()
buffer.write(b64_encoded_list)
buffer.seek(0)
flash('File(s) successfully uploaded')
return send_file(buffer, mimetype="image/jpg", attachment_filename="license.pem", as_attachment=True)
Теперь я могу отправлять и загружать в части веб-приложения, но файл .pem поврежден, поскольку b64_encoded_list содержит кодировку строки b64, хранящуюся в файлах .pem. Но после загрузки файла из веб-приложения и повторного чтения его обратно я получаю сообщение об ошибке — encrypted = pickle.загрузить (открыть (pemfile, «rb»))
Ошибка — UnpicklingError: неверный ключ загрузки, ‘W’.
Как решить эту проблему Я также использовал mimetype — application / x-x509-ca-cert, но все та же ошибка.
Пожалуйста, помогите в этом!!
Заранее спасибо!!
Ответ №1:
Вместо записи выходных данных в файл, вам нужно записать его в файлоподобный объект (например, в файл в памяти).
Вы можете использовать io.BytesIO
.
https://docs.python.org/3/library/io.html#io .БайтзИО
После этого вы отправляете его клиенту.
Комментарии:
1. Okk тогда как я отправлю клиенту, чтобы загрузить формат файла .pem на стороне клиента??
2. flask.palletsprojects.com/en/1.1.x/api/#flask.send_file
3. возвращает send_file(BytesIO(b64_encoded_list.content), mimetype=»application/ x-x509-ca-cert», attachment_filename=»file.pem», as_attachment=True) Примечание — b64_encoded_list — это строка. Я пробовал это, но это не работает, не могли бы вы помочь мне в этом!!
4. buffer = BytesIO() buffer.write(b64_encoded_list) buffer.seek(0) возвращает отправленный файл (buffer, mimetype=»application / x-x509-ca-cert»,attachment_filename=»license.pem», as_attachment=True) Я сделал это и добился успеха при загрузке на стороне клиента, но .pem поврежден, поскольку он содержит кодировку base64 для возврата исходной строки, но при попытке вернуть строку из загруженного файла возникает новая ошибка — UnpicklingError: недопустимый ключ загрузки, ‘W’.
5. Я думаю, вам следует записать (для себя) список того, что должно происходить в какой последовательности, а затем сравнить это с вашим кодом, то есть с тем, что вы делаете. Я не совсем понимаю, чего вы хотите достичь, и я не знаю, что вы хотите в файле .pem (pem обычно используется для сертификатов). Я уверен, что вы можете разобраться в этом самостоятельно. Удачи!