none
abrir archivos en un proyecto mvc RRS feed

  • Pregunta

  • alguien sabe como abrir un fichero en un proyecto MVC yo estou utilizando esto:
     Function OpenDoc(ByVal id As Integer?) As ActionResult
                If IsNothing(id) Then
                    Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                End If
                Dim DocSelec As Documento = db.Documento.Find(id)
                If IsNothing(DocSelec) Then
                    Return HttpNotFound()
                Else
                    IO.File.Open(DocSelec.rutaDocumento, FileMode.Open)
    
                End If
    
    
                'Return View(PozoSelec)
                Return RedirectToAction("Documentos", New With {.id = DocSelec.id_pozo})
            End Function
    en negrita es la instruccion que utilizo pero no se ejecuta con el resusltado esperado, yo quiero que se abra el archivo como si hiciera doble click en el.
    miércoles, 21 de febrero de 2018 13:03

Todas las respuestas

  • quiero que se abra el archivo como si hiciera doble click en el.

    Nop. Olvidalo. No se puede hacer en una aplicacion web. Piensa que el archivo esta en el servidor, pero el usuario llama a tu pagina desde otro ordenador distinto, en el cual puede que ni siquiera exista la misma aplicacion que tu utilizas para abrir el archivo cuando haces doble-clic, e incluso aunque existiera, por motivos de seguridad no se abrira sin antes avisar al usuario.

    En resumidas cuentas, no puedes "abrir" el archivo, lo mas que puedes hacer es tomar los bytes del archivo y devolverselos al nevegador del usuario. Con esos bytes, el navegador hara "lo que pueda", tipicamente preguntarle al usuario si quiere salvarlo, o si quiere abrirlo en el caso de que el navegador conozca alguna aplicacion capaz de abrir ese tipo de archivo en el PC local.

    Para devolver los bytes del archivo al nevegador, puedes usar la instruccion

    Response.WriteFile(DocSelec.rutaDocumento)

    Si optas por seguir esta via, asegurate de leer la documentacion y buscar ejemplos completos, porque hay varios detalles a tener en cuenta, tales como configurar las cabeceras HTTP para que indiquen el tipo de archivo y para indicar que va como "Attachment" (de lo contrario intentara incrustarlo en la pagina y seguramente no se vera nada bien si no es un tipo que entienda el navegador).

    miércoles, 21 de febrero de 2018 13:42
  • hago esto:

    Using fs As FileStream = IO.File.Open(DocSelec.rutaDocumento, FileMode.Open) ¿como formo el archivo para abrirlo ?

    logro cargarlo en un directorio del servidor ¿pero no puede abrirlos?

    tiene que haber algun metodo que lea los bytes y forme el archivo para abrirlo, o mejor todavia, que lo abra directamente

    miércoles, 21 de febrero de 2018 13:53
  • hola

    pero DocSelec.rutaDocumento contiene la ruta fisica al archivo en una carpeta dentro del sitio web ?

    si la idea es enviar el archivo al browser del cliente para que lo descargue deberias enviarlo en el response no realizar un redirect

    Uploading and returning files in ASP.NET MVC

    analiza el titulo "7. Returning files through action results" alli explica como usar el FileResult

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 21 de febrero de 2018 14:06
  • logro cargarlo en un directorio del servidor ¿pero no puede abrirlos?

    Pero, ¿A qué le llamas "abrirlo"? ¿Pretendes que el archivo se vea en la pantalla del servidor web? Piensa que una vez desplegado las cosas son muy distintas que en tu entorno de desarrollo. En desarrollo es posible que consigas abrirlo, pero en producción se va a estar ejecutando bajo IIS, que no tiene acceso a la consola y por lo tanto es imposible mostrar ficheros.

    Si donde quieres abrirlo es en el cliente, utiliza el código que te puse en la primera respuesta para enviar los bytes del fichero hacia el equipo cliente. No se necesita el FileStream, eso ya lo hace internamente la instrucción Response.WriteFile. Recuerda que no se abrirá automáticamente, el navegador hará con él lo que pueda, dependiendo de la configuración del equipo cliente.

    miércoles, 21 de febrero de 2018 17:26