2010-06-24 64 views
31

¿Cómo puedo obtener el nombre de archivo de request.FILES en Django?¿Cómo puedo obtener el nombre de archivo de request.FILES?

def upload(request): 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      upload = Upload() 
      upload.timestamp = datetime.datetime.now() 
      save_instance(form, upload) 

He intentado utilizar esto, pero no funcionó:

if 'filename' in request.FILES: 
     filename = request.FILES['filename'] 

Respuesta

59
request.FILES['filename'].name 

De la documentación request.

Si no conoce la clave, puede iterar sobre los archivos:

for filename, file in request.FILES.iteritems(): 
    name = request.FILES[filename].name 
+1

me da: esperaba un bloque sangrado. Confundo :( – Pol

+0

bien, ¿cómo puedo verificar el nombre de la variable? Pero necesito imprimirlo ¿cómo puedo imprimir lo que está adentro? – Pol

+2

Esto es lo que funcionó para mí: request.FILES ['file']. Name –

42
file = request.FILES['filename'] 
file.name   # Gives name 
file.content_type # Gives Content type text/html etc 
file.size   # Gives file's size in byte 
file.read()   # Reads file 
+1

¿cómo puedo obtener el camino? –

3

La respuesta puede ser obsoleta, ya que existe una name propiedad de la clase UploadedFile. Ver: Uploaded Files and Upload Handlers (Django docs). Por lo tanto, si enlaza su formulario con un FileField correctamente, el acceso debe ser tan fácil como:

if form.is_valid(): 
    form.cleaned_data['my_file'].name 
3

NOTA si está utilizando Python 3.x:

request.FILES es un diccionario de varios valores como objeto que mantiene los archivos cargados a través de un botón de cargar archivo. Diga en su código html que el nombre del botón (tipo = "archivo") es "miarchivo", por lo que "miarchivo" será la clave en este diccionario. Si cargó un archivo, el valor de esta clave será solo uno y si cargó varios archivos, tendrá múltiples valores para esa clave específica. Si usa request.FILES['myfile'], obtendrá el primer o último valor (no estoy seguro). Esto está bien si sólo se ha cargado un archivo, pero si usted desea conseguir todos los archivos que debe hacer esto:

list=[] #myfile is the key of a multi value dictionary, values are the uploaded files 
for f in request.FILES.getlist('myfile'): #myfile is the name of your html file button 
    filename = f.name 
    list.append(filename) 

, por supuesto, uno puede exprimir todo el asunto en una línea, pero esto es fácil de entender

Cuestiones relacionadas