http.client.incomplete чтение произошло python flask при загрузке файла более 200 МБ - PullRequest
0 голосов
/ 16 февраля 2020

Я хочу сделать функцию на flask для загрузки файлов на Azure хранилище BLOB-объектов. эта функция имеет 2 вида запроса. Первым запросом было бы получить все столбцы и первые 5 строк на нем в качестве предварительного просмотра, который мой пользователь будет использовать, чтобы выбрать, какой столбец они получат, когда они фактически загружают файлы. это код, который я использую:

def tryout_download():
    target_tryout = request.args.get('id')
    inout = request.args.get('inout')
    filename = request.args.get('filename')
    if target_tryout is None:
        target_tryout = '_new_'
    encode_filename = quote(filename, encoding='utf-8')
    blob_path = os.path.join('https://'+myAccount+'.blob.core.windows.net',assigned_container_name,inout,str(target_tryout),encode_filename)
    df = pd.read_csv(blob_path,nrows=5,header=None, encoding='utf-8').values.tolist()
    data_header = df[0]
    data_val = df[1:]
    con = ds.db_con()
    datatype = ds.getTryoutDatatypeFromFile(con, target_tryout, filename)
    con.close()
    downloadFilename = filenameHeader(datatype,filename)
    if request.method == "GET":
        print("GET")
    else:
        print("POST")
        data = request.form["headers"]
        dict = json.loads(data)
        selected_vals = dict["headers"]
        res = make_response()
        df = pd.read_csv(blob_path,usecols=selected_vals, encoding='utf-8')
        f = io.StringIO() #Dataframeだと保存できなかったので、変換する
        writer = csv.writer(f, quotechar='"', quoting=csv.QUOTE_ALL, lineterminator="\n")
        writer.writerow(test.columns.values)
        for row in test.itertuples(name=None):
            writer.writerow(row[1:])
        res.data = f.getvalue()
        res.data = res.data.decode('utf-8').encode('sjis')
        encode_downloadFilename = quote(downloadFilename, encoding='utf-8')
        res.headers['Content-Disposition'] = 'attachment; filename=' + encode_downloadFilename
        res.headers['Content-Type'] = 'text/csv; charset=shift_jis'
        return res
    return render_template('tryout_download.html', message=message, title=title, target_tryout=target_tryout, data_header = data_header, filename=downloadFilename,data_val=data_val)

с этим кодом сам процесс загрузки успешно завершен. но когда размер файла становится немного большим, возникают следующие ошибки:

http.client.incompleteread: не завершено

на данный момент, если размер файла превышает 200 МБ, ошибка определенно возникает. Я также попробовал поискать в Google и увидел какой-то другой поток в stackoverflow, в котором говорится, что если я включу процесс чтения файла в try catch, то это будет решено. поэтому я изменил свой код, где произошла ошибка:

try:
   df = pd.read_csv(blob_path,nrows=5,header=None, encoding='utf-8').values.tolist()
except (http.client.IncompleteRead) as e:
   df = e.partial

, но я все еще получаю ту же ошибку. Буду признателен за любую информацию по этой ошибке.

бест,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...