从IE浏览器执行上传时,我的后端(org.apache.commons.fileupload)获取完整的文件路径。
对于其他非IE浏览器,它获取文件名,因为安全性,它没问题。
如何仅从IE的输入中获取 文件名 ?
是否可以在UI上执行,因为我认为编辑apache lib并不是很优雅。
也许,输入字段存在一些参数?
我可以在服务器上完成,但对UI方法很感兴趣。
答案 0 :(得分:45)
下面还有一个IE选项:
亚历
答案 1 :(得分:32)
在服务器端尝试此操作
Path.GetFileName(file.FileName)
答案 2 :(得分:21)
文件输入的目的是提供文件。随附的名称“无论浏览器供应商使用什么”,都不能保证它们与文件系统上的文件名完全无关。
您无法更改浏览器发送的内容。
如果您要使用浏览器发送的名称,那么您需要以确保它对您要处理的任何内容都有效(例如,确保它仅包括文件系统上文件名中允许的字符)。这使得它必须在服务器上处理(就像任何其他客户端提供的数据一样)。
答案 3 :(得分:10)
如果您通过Xhr上传FormData,实际上有一个非常简单的解决方法。 FormData.append api允许您传递文件名作为第三个参数。
const formData = new FormData();
//explicitly setting the file name works in IE 11
formData.append('file', file, file.name);

答案 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)