Pergunta

Quando eu carrego um arquivo em um site usando o controle ASP: Arquivo, a propriedade FileName é diferente no IE e no Firefox. No Firefox, ele apenas fornece o nome do arquivo, mas o IE fornece o caminho completo para o arquivo.

Eu trabalhei em torno disso adicionando o código:

Dim FileName As String = file.FileName
If FileName.LastIndexOf("\") > 0 Then
    FileName = FileName.Substring(FileName.LastIndexOf("\") + 1)
End If

Mas não sei por que isso seria diferente entre os diferentes navegadores. Alguém sabe a razão para isso?

Obrigado.

Foi útil?

Solução

Esta é uma preocupação de segurança/privacidade, o Firefox/Mozilla está fazendo certo e você não terá uma maneira de obter o caminho completo sem um suplemento, applet, Silverlight, Flash ou algum outro mecanismo.

Aqui estão mais informações sobre a posição de Mozilla:

https://developer.mozilla.org/en/updating_web_applications_for_firefox_3

Veja a seção sobre Alterações de segurança-> Campos de upload de arquivos

Espero que o IE siga o exemplo, por isso temos um ambiente consistente e seguro.

Outras dicas

Uma solução simples para este testado no IE e Chrome

new FileInfo(myHttpPostedFileBase.FileName).Name

Isso garantirá que você sempre obtenha apenas o nome do arquivo, mesmo que o caminho esteja incluído.

No IE8, esse comportamento mudou e apenas passará o nome do arquivo, não o caminho completo. ;-)

Detalhes e link para a postagem do blog do IE discutindo a mudança no IE8:http://blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading--file-using-fileupload-control-dails-in-ie8.aspx

Aplicativos para o servidor que desejam analisar o nome do arquivo deve verificar, mas não Espero Haverá barras de barriga no nome do arquivo.

IE8 Substituição de configuração do usuário:http://blogs.msdn.com/blogfiles/webtopics/windowslivewriter/uploadingafileusingfileuploadcontrolfail_167/clip_image002_2.jpg

Você também pode usar o path.getfilename (file.filename) que retornam apenas o nome do arquivo. Exemplo:

Dim File As HttpPostedFile = context.Request.Files("txtFile")
' let's FileName is "d:\temp\1.txt"
Dim FileName As String = Path.GetFileName(File.FileName)
' FileName will be "1.txt"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top