subir ruta obtener nombre net fileupload extension con completa como asp archivo asp.net file-upload

asp.net - obtener - ruta completa fileupload asp net



Obtener la ruta completa de un archivo con FileUpload Control (18)

A partir de IE8, la ruta completa ya no se envía a sitios en la Zona de Internet.

Consulte la sección "Control de carga de archivos" al final de esta publicación: http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx para la discusión .

Estoy trabajando en una aplicación web que utiliza el control FileUpload. Tengo un archivo xls en el archivo completo ''C: / Mailid.xls'' que estoy intentando cargar.

Cuando uso el comando

FileUpload1.PostedFile.FileName

No puedo obtener el archivo completo de mi sistema. Sin embargo, cuando uso el comando anterior en otro sistema, funciona bien.

También probé los siguientes comandos sin éxito:

System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName); Path.GetFileName(FileUpload1.PostedFile.FileName); System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName).ToString(); Convert.ToString(System.IO.Directory.GetParent(FileUpload1.PostedFile.FileName));

¿Cómo puedo obtener el camino completo?


Actualmente, es cierto que "cuando cargas un archivo, el navegador solo envía el nombre de archivo de origen y no la ruta completa": tiene sentido que el servidor no sepa si el archivo estaba en "C: / WINDOWS /" o " F: / SOMEDIR / OTHERDIR / PERSONALINFO / ". El nombre del archivo siempre se envía, y es útil tanto para ayudar al usuario a ''reconocer'' el contenido como para posiblemente interrogar a la extensión del archivo para ayudar a determinar el tipo de archivo.

Sin embargo, sé por experiencia que Internet Explorer definitivamente solía (en versiones anteriores) enviar la ruta completa. Es difícil encontrar una confirmación autorizada (excepto este doco de control de descarga de archivos apache )

Internet Explorer proporciona la ruta completa al archivo cargado y no solo el nombre del archivo base

De todos modos, no debe usar ni esperar que ningún navegador "moderno" envíe la ruta completa.


En Opciones de Internet Explorer, en la pestaña de seguridad, haga clic en el botón de seguridad personalizado, hay una opción para enviar la ruta local al cargar algún archivo en el servidor.

Desactivado por defecto. Solo habilítalos.


Esto arroja el archivo en su carpeta temporal con el nombre del archivo, luego de eso puede llamarlo y no preocuparse por ello. Porque se eliminará si está en su carpeta temporal durante varios días.

string filename = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(),".xls")); File.WriteAllBytes(filename, FileUploadControl.FileBytes);


Esto no será un problema si usamos el navegador IE. Esto es para otros navegadores, guarde el archivo en otra ubicación y use esa ruta.

if (FileUpload1.HasFile)

{

string fileName = FileUpload1.PostedFile.FileName;

string TempfileLocation = @ "D: / uploadfiles /";

cadena FullPath = System.IO.Path.Combine (TempfileLocation, fileName);

FileUpload1.SaveAs (FullPath);

Response.Write (FullPath);

}

Gracias


Estoy usando IE 8 (en dos máquinas separadas). Cada uno carga la ruta completa del archivo local. Según lo sugerido por Gabriël, Path.GetFileName (fileUploadControl.PostedFile.FileName) parece ser la única forma de asegurarse de que solo obtenga el nombre del archivo.


FileUpload nunca le dará la ruta completa por razones de seguridad.


IE 7 y versiones anteriores enviaron la ruta completa del archivo cargado al servidor relacionado con el campo input type="file" . Firefox y otros navegadores modernos consideran que esto es un defecto de seguridad y no lo son. Sin embargo, esto parece haber sido arreglado en IE 8.

Tal vez debería evaluar en su lugar por qué necesita la ruta completa al archivo tal como estaba ubicado en el sistema del cliente. Creo que es información realmente superflua que nunca debería publicarse en absoluto. Todo lo que debe preocuparse con el es el nombre del archivo para que pueda guardar el archivo sin realizar cambios en el nombre.


Mira esto:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="FileUp.aspx.vb" Inherits="FileUp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server"></asp:Label><br /> <asp:FileUpload ID="FileUpload1" runat="server" /><br /> <asp:Button ID="Button1" runat="server" Text="Upload" /> </div> </form> </body> </html>

Código:

Partial Class FileUp Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim path As String Dim path1 As String path = Server.MapPath("~/") FileUpload1.SaveAs(path + FileUpload1.FileName) path1 = path + FileUpload1.FileName Label1.Text = path1 Response.Write("File Uploaded successfully") End Sub End Class


No puede obtener la ruta completa de un archivo en la máquina del cliente. Su código podría funcionar en localhost porque su cliente y el servidor es la misma máquina y el archivo está en el directorio raíz. Pero si lo ejecuta en una máquina remota obtendrá una excepción.


Quizás malinterprete la forma en que funciona FileUpload .

Cuando carga un archivo, se transfiere efectivamente desde la computadora del cliente al servidor que aloja su aplicación. Si está desarrollando la aplicación, la mayoría de las veces, tanto el cliente como el servidor son la misma máquina (su computadora). Sin embargo, una vez que se implementa la aplicación, puede haber cualquier cantidad de clientes conectados al servidor, cada uno cargando un archivo diferente.

Generalmente, no es necesario conocer la ruta completa del archivo en la computadora del cliente; a menudo querrás hacer algo con el contenido del archivo. Sus ejemplos parecen ASP.NET C #, así que supongo que está utilizando el control FileUpload. Puede obtener los contenidos del archivo cargado leyendo la secuencia sin FileUpload.PostedFile.InputStream ( FileUpload.PostedFile.InputStream ) o guardando primero el archivo ( FileUpload.PostedFile.SaveAs ), y luego accediendo al archivo guardado. Es su responsabilidad guardar el archivo, si desea que sea accesible después de la solicitud actual; si no lo hace, ASP.NET lo elimina.

Una cosa más: no olvide configurar la propiedad enctype en su formulario para "multipart / form-data". Si no lo hace, el navegador del cliente no enviará el archivo, y pasará unos minutos preguntándose qué salió mal.


Solo para dar mis 2 centavos.

En este momento, también obtengo la ruta local completa del usuario. Solo desde una máquina puedo replicar este problema, pero realmente proporciona la ruta completa del archivo en la máquina del usuario.

Este es un usuario final de nuestra aplicación alojada en un servidor externo. Por lo tanto, no está en la máquina local ni en un servidor local desde el que podría ser compartido.

Puede resolver el problema, al menos para tener el mismo comportamiento todo el tiempo con esto:

Path.GetFileName(fileUpload.FileName)

Por cierto, acabo de encontrar este artículo que dice que también puede suceder: http://www.eggheadcafe.com/community/aspnet/17/10092650/fileupload-control-pro.aspx

Solo para confirmar el problema.


Tratar

Server.MapPath(FileUpload1.FileName);

Editar: esta respuesta describe cómo obtener la ruta a un archivo en el servidor. No describe cómo obtener la ruta a un archivo en el cliente, que es lo que hizo la pregunta. La respuesta a esa pregunta es "usted no puede", porque el navegador moderno no le dirá la ruta del cliente, por razones de seguridad.


Tuve el problema opuesto al del póster original: estaba obteniendo la ruta completa cuando solo quería el nombre del archivo. Usé la solución de Gabriël para obtener solo el nombre del archivo, pero en el proceso descubrí por qué se obtiene el camino completo en algunas máquinas y no en otras.

Cualquier computadora unida al dominio le devolverá la ruta completa del nombre del archivo. Intenté esto en varias computadoras diferentes con resultados consistentes. No tengo una explicación de por qué, pero al menos en mis pruebas fue consistente.


Verifique esta publicación bajo FileUpload Control

Además, la opción de URL "Incluir ruta del directorio local al cargar archivos" se ha establecido en "Deshabilitar" para la Zona de Internet. Este cambio evita la fuga de información del sistema de archivos local potencialmente sensible a Internet. Por ejemplo, en lugar de enviar la ruta completa C: / users / ericlaw / documents / secret / image.png, Internet Explorer 8 ahora solo enviará el nombre de archivo image.png.

Es una opción bajo seguridad de Internet que se puede habilitar


Convert.ToString(FileUpload1.PostedFile.FileName);


Path.GetFullPath(fileUpload.PostedFile.FileName);

Disculpe, recibirá su directorio de archivos de programa + su nombre de archivo.


dim path as string = FileUpload1.PostedFile.FileName

Por cierto, estoy usando Visual Studio 2010. No sé si hay alguna diferencia con la otra versión.