IE的<input type =“'file'”/>给出完整路径,仅需要文件名

时间:2010-02-04 13:52:45

标签: file upload input path internet-explorer

从IE浏览器执行上传时,我的后端(org.apache.commons.fileupload)获取完整的文件路径。

对于其他非IE浏览器,它获取文件名,因为安全性,它没问题。

如何仅从IE的输入中获取 文件名

是否可以在UI上执行,因为我认为编辑apache lib并不是很优雅。

也许,输入字段存在一些参数?

我可以在服务器上完成,但对UI方法很感兴趣。

7 个答案:

答案 0 :(得分:45)

下面还有一个IE选项:

  • 互联网选项
  • 安全标签
  • 在“Internet”或“Intranet”中单击“自定义级别”
  • 在“安全设置”中向下滚动,直至看到“将文件上传到服务器时包含本地目录路径”并将其禁用。
  • 在“Internet选项”窗口中单击“确定”并刷新。

亚历

答案 1 :(得分:32)

在服务器端尝试此操作

Path.GetFileName(file.FileName)

答案 2 :(得分:21)

文件输入的目的是提供文件。随附的名称“无论浏览器供应商使用什么”,都不能保证它们与文件系统上的文件名完全无关。

您无法更改浏览器发送的内容。

如果您要使用浏览器发送的名称,那么您需要以确保它对您要处理的任何内容都有效(例如,确保它仅包括文件系统上文件名中允许的字符)。这使得它必须在服务器上处理(就像任何其他客户端提供的数据一样)。

答案 3 :(得分:10)

如果您通过Xhr上传FormData,实际上有一个非常简单的解决方法。 FormData.append api允许您传递文件名作为第三个参数。

&#13;
&#13;
const formData = new FormData();
//explicitly setting the file name works in IE 11
formData.append('file', file, file.name);
&#13;
&#13;
&#13;

答案 4 :(得分:3)

您对UI方法感兴趣 您可以添加一个隐藏的输入字段(或JSON条目),其中只包含由javascript填充的裸文件名。

使用以下跨浏览器(包括IE) / platform javascript函数(取自my answer here,附带完整说明和参考),仅获取文件名:

function extractFilename(s){ 
  // returns string containing everything from the end of the string 
  //   that is not a back/forward slash or an empty string on error
  //   so one can check if return_value===''
  return (typeof s==='string' && (s=s.match(/[^\\\/]+$/)) && s[0]) || '';
} 
<input type="file" onchange="alert(extractFilename(this.value));">

答案 5 :(得分:1)

似乎很容易从服务器端处理这个问题,但是基于要求。

我已经在生产环境中对此进行了测试并且工作正常。

String fileName = file.getName();
if (fileName != null) {
    fileName = FilenameUtils.getName(fileName);
}

IE默认情况下会提供完整路径以及文件名,并且在从某个共享目录上传文件时会导致问题。添加以上代码段将解决此问题并在所有情况下都能正常运行。

答案 6 :(得分:0)

如果您按xhr发布,则只需提供文件名

post look like this