<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]) || '';
<input type="file" onchange="alert(extractFilename(this.value));">
【讨论】:
【参考方案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'> 文件选择事件