【问题标题】:<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 的答案是正确的,这可能对其正在寻找同样问题的其他人有所帮助。

标签: file upload input path internet-explorer


【解决方案1】:

下面还有一个IE选项:

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

在服务器端试试这个:

Path.GetFileName(file.FileName)

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    【解决方案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 了解详情。谢谢。
        猜你喜欢
        • 1970-01-01
        • 2011-08-12
        • 2010-11-27
        • 2011-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 2011-10-20
        相关资源
        最近更新 更多