Saya sedang menulis aplikasi termos pertama saya. Saya berurusan dengan unggahan file, dan pada dasarnya yang saya inginkan adalah membaca data / konten file yang diunggah tanpa menyimpannya dan kemudian mencetaknya pada halaman yang dihasilkan. Ya, saya berasumsi bahwa pengguna selalu mengupload file teks.
Berikut adalah fungsi unggah sederhana yang saya gunakan:
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
a = 'file uploaded'
return render_template('upload.html', data = a)
Saat ini, saya sedang menyimpan file, tetapi yang saya butuhkan adalah variabel 'a' untuk memuat konten / data file .. ada ide?
file = request.files.get('file')
filetype = magic.from_buffer(file.read(1024))
f = request.files['file']
meletakkan file yang diunggah (dalam permintaan) ke var ("f"). Kemudianf.read()
bekerja menggunakan kode di atas. kapanprint f.read()
saya mendapatkan benar mencari sampah di terminal. Semoga membantu.mystring = TextIOWrapper(binary_stream)
f.read()
tidak menghasilkan apa-apa untukku juga. Menelepon lebih duluf.seek(0)
berhasil bagi saya.Jika Anda ingin menggunakan perangkat Flask standar - tidak ada cara untuk menghindari penyimpanan file sementara jika ukuran file yang diunggah> 500kb. Jika lebih kecil dari 500kb - ia akan menggunakan "BytesIO", yang menyimpan konten file dalam memori, dan jika lebih dari 500kb - ia menyimpan konten dalam TemporaryFile () (seperti yang dinyatakan dalam dokumentasi werkzeug ). Dalam kedua kasus tersebut, skrip Anda akan diblokir hingga keseluruhan file yang diunggah diterima.
Cara termudah untuk mengatasi ini yang saya temukan adalah:
1) Buat kelas IO seperti file Anda sendiri tempat Anda melakukan semua pemrosesan data yang masuk
2) Dalam skrip Anda, ganti kelas Request dengan milik Anda:
3) Gantikan request_class Flask dengan milik Anda:
4) Pergi minum bir :)
sumber
Saya mencoba melakukan hal yang persis sama, membuka file teks (sebenarnya CSV untuk Pandas). Tidak ingin membuat salinannya, hanya ingin membukanya. Bentuk-WTF memiliki browser file yang bagus, tetapi kemudian membuka file dan membuat file sementara, yang ditampilkan sebagai aliran memori. Dengan sedikit pekerjaan di bawah tenda,
sumber
Saya membagikan solusi saya (dengan asumsi semuanya sudah dikonfigurasi untuk terhubung ke google bucket in flask)
Posting saya
Langsung ke Google Bucket in flask
sumber
Kami hanya melakukan:
sumber
dalam fungsi
dalam file html
sumber
Jika kita ingin membuang file memori ke disk. Kode ini dapat digunakan
sumber