none
Explorador de Archivos RRS feed

  • Pregunta

  • Hola, me gustaria hacer un explorador de archivos en asp.net mvc razor.

    Hice uno, siguiendo un tutorial de Tuttini (no encuentro el blog por eso no lo escribo ahí), pero al intentar abrir uno de mis archivos de carpeta, por ejemplo un .doc, no me lo abre y si me lo descargo se guarda un archivo con el nombre de la carpeta en donde está (pero no del archivo).

    Podrían ayudarme? Gracias


    Jose

    martes, 16 de febrero de 2016 9:21

Todas las respuestas

  • >>pero al intentar abrir uno de mis archivos de carpeta,

    lo abres del lado del servidor ? porque si es asi no vas a verlo en el cliente

    el doc debes descargarlo al cliente para que este pueda abrilo

    >>si me lo descargo se guarda un archivo con el nombre de la carpeta en donde está

    pero en ningun momento al FileResult le indicas una ruta, esta la decide el usuario

    Download Files in ASP.NET MVC 3 using Controller Action

    como vers en e ejemplo el indicas

    return File(filename, contentType,"Report.pdf");

    el file que quieres enviar, el tipo de documento en tu caso debes indicar que es word y el nombre, no le mencionas ninguna ruta

    quizas es la que quedo definida por defecto en el cliente, peor este puede cambiarla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de febrero de 2016 10:43
  • @Html.ActionLink(@file.FileName, "Tecnica", new { path2 = (@file.ruta + "/" + @file.FileName) }, new { target = "_blank" }) 

    El archivo aparece y cuando pulsto sobre él va a su ruta en donde está  pero se descarga un archivo llamado 'Tecnica' al cual si le añado por ejemplo .xls, observo que es el archivo que quiero descargar, pero se baja sin extensión y con el nombre 'Tecnica'.


    Jose

    martes, 16 de febrero de 2016 10:49
  • es que un archivo no se descarga como ActionLink(), salvo que estes invocando un action para la descarga

    pero si ingresa a un action de nombre "Tecnica" deberias hacer que el

    return File(filename, contentType, file.FileName);

    tenga el nombre del archivo

    o sea valida si al presionar el link ingresa a un action? si lo hace ubica un breakpoint y valida como devuelves en el response ese archivo y le defines el nombre

    pero ese nombre viene desde el servidor y lo defines en el action

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de febrero de 2016 11:49
  • Esto va asi: dónde pongo el return que me comentas?

    @Html.ActionLink(@file.FileName, "Tecnica", new { path2 = (@file.ruta + "/" + @file.FileName) }, new { target = "_blank" })

    Lo que aparece en verde no está comentado, no sé x qué aparece asi

    public ActionResult Tecnica(string path, string path2, string path3)
            {
                string realPath="";
    
              
               if (path3 == null) {
                    path3 = path;
    
    
                    realPath = (@"C:\\Areas\Tecnica\" + path + path2);
    
                }
                else {
                    path = path + @"\" + path3;
    
                    realPath = (@"C:\\Areas\Tecnica\" + path + path2);
                }
    
                if (System.IO.File.Exists(realPath))
                {
                    return base.File(realPath, "application/octet-stream");
                }
                else if (System.IO.Directory.Exists(realPath))
                {
    
                    Uri url = Request.Url;
    
                    List<DirModel> dirListModel = new List<DirModel>();
    
                    IEnumerable<string> dirList = Directory.EnumerateDirectories(realPath);
    
                    foreach (string dir in dirList)
                    {
                        DirectoryInfo d = new DirectoryInfo(dir);
    
                        DirModel dirModel = new DirModel();
    
                        dirModel.DirName = Path.GetFileName(dir);
                        dirModel.DirAccessed = d.LastAccessTime;
                        dirModel.ControlPath = path;
                        dirListModel.Add(dirModel);
                    }
    
    
                    List<FileModel> fileListModel = new List<FileModel>();
    
                    IEnumerable<string> fileList = Directory.EnumerateFiles(realPath);
                    foreach (string file in fileList)
                    {
                        FileInfo f = new FileInfo(file);
    
                        string nombreArchivo = Path.GetFileName(file);
                        int longitudArchivo = nombreArchivo.Length;
    
                        string extension = nombreArchivo.Substring((longitudArchivo - 3), 3);
    
                        FileModel fileModel = new FileModel();
    
                        if (f.Extension.ToLower() != "php" && f.Extension.ToLower() != "aspx"
                            && f.Extension.ToLower() != "asp")
                        {
                            fileModel.FileName = Path.GetFileName(file);
                            fileModel.FileExtension = extension;
                            fileModel.ruta = path;
                            fileModel.FileAccessed = f.LastAccessTime;
                            fileModel.FileSizeText = (f.Length < 1024) ? f.Length.ToString() + " B" : f.Length / 1024 + " KB";
    
                            fileListModel.Add(fileModel);
                        }
                    }
    
                    ExplorerModel explorerModel = new ExplorerModel(dirListModel, fileListModel);
    
                    ViewBag.hola = realPath;
    
                    return View(explorerModel);
                }
                else
                {
                    return Content(path + " directorio no válido.");
                }
            }



    Jose





    martes, 16 de febrero de 2016 12:01
  • hola

    pero en este action que muestras el codigo estas devolviendo una view que genera html, alli no estas descagando nada

    deberias definir diferentes action para listar los archivos y otro para descargar, no el mismo, eso solo genera una ensalada de codigo

    que el ActionLink de descarga invoque a otro action para que envie el FileResult que genere la descarga

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de febrero de 2016 13:31
  • Ya está solucionado, gracias, sustituí actionLink por <a href ....

    Jose

    miércoles, 17 de febrero de 2016 11:22