Usuario
abrir archivos en un proyecto mvc

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.
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).
-
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
-
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 -
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.