Вот код на стороне сервера с Python и Flask:
from flask import Flask, request, send_file
import io
import zipfile
import bitstring
app = Flask(__name__)
@app.route('/s/', methods=['POST'])
def return_files_tut():
try:
f = io.BytesIO()
f.write("abcd".encode())
return send_file(f, attachment_filename='a.ret.zip')
except Exception as e:
return str(e)
if __name__ == '__main__':
app.run(debug=True)
Ниже приведена команда Curl:
λ curl -X POST http://localhost:5000/s/ -o ret.tmp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 4 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (18) transfer closed with 4 bytes remaining to read
Как мне использовать Curl для получения файла?
@user459872 user459872 пробовал на Windows и MacOS, ошибка все еще присутствует.
это не «ошибка», просмотрите содержимое буфера перед отправкой с помощью print(f.read())






При записи данных указатель перемещается на следующую позицию в файле. Это означает, что перед тем, как данные будут прочитаны, чтобы сделать их доступными для загрузки, указатель указывает на конец, и дальнейшие данные не считываются. Поэтому загрузка не удалась. Чтобы предложить файл для загрузки, указатель внутри файла необходимо сбросить в начало, используя seek(0).
Атрибут attachment_filename для send_file() устарел и заменен на download_name.
@app.post('/s/')
def return_files_tut():
f = io.BytesIO()
f.write("abcd".encode())
f.seek(0)
return send_file(f, download_name='a.ret.zip')
в качестве альтернативы можно передать всю строку непосредственно в BytesIO-конструктор, см. пример
У меня это работает нормально.