O upload da imagem exibe “ C: \ fakepath \ image … ” no Mac OS [duplicado ]

Esta questão já tem respostas aqui :

Comentários

  • pegue o primeiro arquivo do controle e depois pegue o nome do arquivo, ele irá ignorar o caminho do arquivo no cromo, e também fará a correção do caminho para, por exemplo, broswers. ao salvar o arquivo, você deve usar o método System.io.Path.GetFileName para obter o nome do arquivo apenas para navegadores var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; para (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Resposta

Este é um recurso de segurança do navegador, não está sob o controle do site.

Comentários

  • E Ian Hickson, que está envolvido nas especificações HTML5, escreve : " O plano original era ter apenas o nome do arquivo. Infelizmente, acontece que, se você fizer isso, alguns sites quebrarão, porque eles esperam o caminho (e esperam um caminho do Windows, nada menos). É por isso que o Opera e o IE8 retornam um caminho falso – não porque o HTML5 diz para fazê-lo. Na verdade, fiz HTML5 dizer isso porque eles estavam fazendo isso. "
  • Aprendi algo hoje, mas não ' não mude realmente a pergunta. Se todos os navegadores retornam um caminho falso, por que exibir o caminho?
  • Por exemplo, @zneak, devido ao firmware de hardware que o espera , que não poderia ser alterado facilmente. Então: realmente só porque existem ' s muitos sites que esperam um caminho, alguns dos quais não podem ser facilmente alterados. 🙁
  • @Arjan, agora você pode postar isso como uma resposta: D
  • Eu sei a que @YOU ' se refere , mas acho que isso já foi respondido perfeitamente! (poderíamos editá-la nesta resposta, é claro).
  • @zneak, observe que o HTML do Stack Exchange é realmente apenas <input type="file" name="filename" id="filename-input" value="browse" ...>.
  • @Arjan Não, ' não. No Safari, o caminho do arquivo não ' t aparecem antes de um <input type="file">. Os desenvolvedores do Stack Exchange escolheram conscientemente exibir o caminho do arquivo (falso) em uma caixa com um layout semelhante ao que você ' d obter com o Windows. O elemento de caminho ' s id é shadow-filename. Se você ocultá-lo, o caminho do arquivo desaparece.
  • Tem certeza, @zneak? Só vejo isso no Chrome, não em outros navegadores, nos sites do Stack Exchange …
  • @Arjan Sim, estou. Escolha um arquivo, acione o inspetor da web, digite document.querySelector('#shadow-filename').style.display = 'none' e observe-o desaparecer.
  • Eu quis dizer: tem certeza que todos os navegadores mostram isso para você, @zneak? Não no meu Mac.
  • @Arjan Firefox não ' não exibe, mas que ' é provavelmente para o razões mencionadas em seu primeiro link (ou seja, ele apenas fornece o nome do arquivo real ao consultar o valor <input type="file"> '). Fora isso, funciona da mesma maneira: esconda shadow-filename e você realmente se livra do campo do nome do arquivo.
  • Ok, eu estava errado sobre o <input type="file" ...> que de fato não é o que é mostrado quando o JavaScript entra em ação, @zneak. Mas por que culpar os sites da SE por exibirem o caminho que o navegador lhes dá …?
  • @Arjan Eu culpo a SE por usar um recurso quebrado do HTML 5. Além disso, todos os navegadores já implementam algum tipo de forma para informar ao usuário qual arquivo ele selecionou. Por que eles tiveram que substituí-lo?
  • Ah, @zneak, acho que não ' uso muitos sites que usam o antigo <input type="file" ...> mas, de fato, o Chrome mostraria apenas o nome do arquivo vazio sem seu caminho. (Ainda assim, o caminho enviado ao servidor seria C:\fakepath, mas ninguém o veria.) Não posso ' dizer por que SE precisou substituí-lo. Talvez porque eles não estejam enviando para SE, mas para imgur.com, mas mesmo isso provavelmente poderia ser feito sem as <input> coisinhas fictícias. Ou eles podem apenas querer que a caixa de diálogo tenha a mesma aparência em todos os sistemas? (Waffles que responderam à pergunta duplicada podem saber.)
  • @zneak, eu não ' não sei sobre o seu sistema operacional, mas para o Windows, faça isso, obtenha o primeiro arquivo do controle e, em seguida, obtenha o nome de o arquivo, ele irá ignorar o caminho do arquivo no cromo e também fará a correção do caminho para os navegadores, por exemplo. ao salvar o arquivo, você deve usar o método System.io.Path.GetFileName para obter o nome do arquivo apenas para navegadores var fileUpload = $ (" # ContentPlaceHolder1_FileUpload_mediaFile ") .get (0); var files = fileUpload.files; var mediafilename = " "; para (var i = 0; i < files.length; i ++) {mediafilename = files [i] .name; }

Deixe uma resposta

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