HttpPostedFile: IE versus Firefox

Estou aqui programando, feliz da vida, e me enviam um bug para matar.

Ao subir um arquivo em nosso sistema Asp.NET surge o erro:

"The given path's format is not supported."

ou

"Não há suporte para o formato do caminho dado."
(maldita MS por traduzir mensagens de erro)

Mas eu não conseguia reproduzir o problema de nenhuma maneira. Até testar no Internet Explorer. O método que utilizo para gravar o arquivo é este:

public string Grava(HttpPostedFile postedFile, string id)
{
    string newfilename = id + postedFile.FileName;
    string fullName = DirPath + newfilename;
    postedFile.SaveAs(fullName);

    return fullName;
}

A chamada é realizada assim, onde fupAnexo é um controle FileUpload:

string path = anexo.Grava(fupAnexo.PostedFile, guid.ToString());

O problema está nesta propriedade: postedFile.FileName. O conteúdo dela depende de qual navegador é utilizado pelo usuário.

No IE o conteúdo é o caminho completo do arquivo no computador do usuário: C:\\Pasta\\Pasta\\Macarrao\\arquivo.xis.

No Firefox apenas o nome do arquivo: arquivo.xis.

O framework deveria uniformizar o acesso aos recursos do sistema, mas aprendo cada vez mais que não dá para confiar em dados vindos do usuário nem do sistema. Não confie em nada.

Acertei o método para o que segue:

public string Grava(HttpPostedFile postedFile, string id)
{
    string[] filename = postedFile.FileName.Split('\\');
    string newfilename = id + filename[filename.Count() - 1];

    string fullName = DirPath + newfilename;
    postedFile.SaveAs(fullName);

    return fullName;
}

Falta testar o caso em que o usuário acessa o sistema a partir do Linux (ou Mac OSX) usando o Internet Explorer. Mas acho que não existam tantos loucos por aí.

Posts relacionados

This entry was posted in programação, web and tagged , . Bookmark the permalink.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>