<input type='file'> for IE 给出完整路径,只需要文件名

Posted

技术标签:

【中文标题】<input type=\'file\'> for IE 给出完整路径,只需要文件名【英文标题】:<input type=‘file’> for IE gives full path, need file name only<input type='file'> for IE 给出完整路径,只需要文件名 【发布时间】:2011-01-13 02:15:18 【问题描述】:

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

对于其他非 IE 浏览器,它会获取文件名,并且由于安全性而可以。

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

是否可以在 UI 上做,因为我觉得编辑 apache lib 不是很优雅。

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

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

【问题讨论】:

嗨.. 请将 Alex 的答案更改为正确答案。 嗨,apm,为什么?昆汀的回答对我来说没问题。 对不起,我想如果您选择 alex 的答案是正确的,这可能对其正在寻找同样问题的其他人有所帮助。 【参考方案1】:

下面还有一个IE选项:

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

【讨论】:

官方参考:msdn.microsoft.com/en-us/library/ms535128%28v=vs.85%29.aspx【参考方案2】:

在服务器端试试这个:

Path.GetFileName(file.FileName)

【讨论】:

【参考方案3】:

文件输入的重点是提供一个文件。附带的名称是“浏览器供应商喜欢使用的任何名称”,它们根本不保证与文件系统上的文件名有任何关系。

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

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

【讨论】:

好的,谢谢,似乎只接受服务器解决方案,我刚刚阅读了 apache 建议:commons.apache.org/fileupload/faq.html#whole-path-from-IE【参考方案4】:

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

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

【讨论】:

这是最简单的例子。至于前端无法发送正确名称的问题,这应该在前端级别完成,而不是在后端工作。此外,我还想在文件列表中显示名称,所以这是完美的选择。【参考方案5】:

您对 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]) || '';
 
&lt;input type="file" onchange="alert(extractFilename(this.value));"&gt;

【讨论】:

【参考方案6】:

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

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

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

IE 默认情况下会提供完整路径以及文件名,这会在从某个共享目录上传文件时引起问题。在上面添加 sn-p 将解决问题并且在所有情况下都能正常工作。

【讨论】:

【参考方案7】:

如果您是通过 xhr 发布的,那么您只需提供文件名

【讨论】:

edit您的帖子并将实际代码显示为文本而不是屏幕截图。其他人无法从您的图像中复制和粘贴。 See here 了解详情。谢谢。

以上是关于<input type='file'> for IE 给出完整路径,只需要文件名的主要内容,如果未能解决你的问题,请参考以下文章

HTML <input type='file'> 文件选择事件

h5 input type=file 图片预览

HTML <input type='file'> 应用过滤器

样式 <input type="file"> [重复]

修改input type=file 标签默认样式的简单方法

input type=file输入框