Я хочу сделать функцию на 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
, но я все еще получаю ту же ошибку. Буду признателен за любую информацию по этой ошибке.
бест,