Estoy escribiendo mi primera solicitud de matraz. Estoy tratando con cargas de archivos, y básicamente lo que quiero es leer los datos / contenido del archivo cargado sin guardarlo y luego imprimirlo en la página resultante. Sí, asumo que el usuario carga un archivo de texto siempre.
Aquí está la función de carga simple que estoy usando:
@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)
En este momento, estoy guardando el archivo, pero lo que necesito es esa 'una' variable para contener el contenido / datos del archivo ... ¿alguna idea?
file = request.files.get('file')
filetype = magic.from_buffer(file.read(1024))
f = request.files['file']
coloca el archivo cargado (en la solicitud) en una var ("f"). Luegof.read()
, funciona usando el código anterior. ¿Cuándoprint f.read()
me sale la basura de aspecto correcto en la terminal? Espero que ayude.mystring = TextIOWrapper(binary_stream)
f.read()
tampoco me dio nada. Llamar primerof.seek(0)
hizo el truco para mí.Si desea utilizar material de Flask estándar, no hay forma de evitar guardar un archivo temporal si el tamaño del archivo cargado es> 500 kb. Si es menor de 500kb, usará "BytesIO", que almacena el contenido del archivo en la memoria, y si es más de 500kb, almacena el contenido en TemporaryFile () (como se indica en la documentación de werkzeug ). En ambos casos, su secuencia de comandos se bloqueará hasta que se reciba la totalidad del archivo cargado.
La forma más fácil de solucionar esto que he encontrado es:
1) Cree su propia clase IO similar a un archivo en la que realice todo el procesamiento de los datos entrantes
2) En su secuencia de comandos, anule la clase Request con la suya propia:
3) Reemplace request_class de Flask con el suyo:
4) Ve a tomar una cerveza :)
fuente
Estaba tratando de hacer exactamente lo mismo, abrir un archivo de texto (en realidad, un CSV para Pandas). No quiero hacer una copia, solo quiero abrirlo. El formulario-WTF tiene un buen buscador de archivos, pero luego abre el archivo y crea un archivo temporal, que presenta como un flujo de memoria. Con un poco de trabajo bajo el capó
fuente
Comparto mi solución (asumiendo que todo ya está configurado para conectarse al cubo de Google en el matraz)
Mi publicacion
Directo a Google Bucket en matraz
fuente
En caso de que queramos volcar el archivo en memoria al disco. Este código se puede utilizar
fuente
Simplemente hicimos:
fuente
en función
en archivo html
fuente