7

我正在使用 Jersey 进行文件上传,但我只需要文件名。Internet Explorer 发送整个路径,并根据 FormDataContentDisposition 中的内容,Jersey 解析出斜线,所以我什至无法解析它。谢谢。

4

4 回答 4

2

听起来是个棘手的问题。理想的情况当然是获取包含斜杠的字符串,然后使用 string.split!

如果做不到这一点,我可以开始想到的唯一策略是尝试遍历字符串,看看是否存在用于字符串第一部分的各种长度的文件夹等。这也可能会导致问题,但如果你打算找到一个文件夹“MyFolder” (2)”,还有一个“MyFolder”。我对球衣了解不多,但我建议尝试找到一种不同的方式来抓住你需要的绳子。

于 2013-10-03T16:33:14.397 回答
2
  1. 向文件输入标签添加更改事件
  2. 解析文件名,因为此时它仍然有斜杠
  3. 将该值粘贴到隐藏的输入中

然后,隐藏的输入与表单的其余部分一起提交。


@kombat 找到了这个解决方案并将其作为评论发布。为了更好,现在将其重新发布为社区 wiki 答案。

于 2015-10-06T15:10:16.360 回答
1

这是泽西岛的一个错误。在 Nabble 讨论http://jersey.576304.n2.nabble.com/Jersey-truncating-the-slashes-from-the-uploaded-file-name-td5984041.html中,该错误的作者揭示了自己并承认“重用用于解析 HTTP 标头以解析Content-Disposition. 但是,引用的 RFC 2616 没有指定Content-Disposition字段将根据指定给 HTTP 标头的规则进行转义。正好相反,上面写着:

Content-Disposition 不是 HTTP 标准的一部分,但由于它被广泛实施,我们正在为实施者记录它的使用和风险。

这个错误已经在 J​​ersey 的org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide实际版本中的类中有一个丑陋的解决方法,但是它不适用于 IE 11 和 Edge,因为它会检查已更改的 User-Agent 部分。有一个修复请求:https ://github.com/jersey/jersey/pull/233/files ,但近 2 年来没有人愿意合并它。

您有 3 个解决方案:

1)在客户端应用“修复”,恕我直言,这是一种错误的方法,因为客户端没有错误,错误在泽西岛!

2) 将 Jersey 更改为其他框架,其中开发人员更重视兼容性问题,而不是专注于最大化代码重用等。

3) 手动修补泽西岛。下载源代码,应用拉取请求,使用修改后的版本号编译和发布。

于 2018-02-09T07:32:15.353 回答
0

我在尝试 Eclipse 浏览器时遇到了这个错误。当我在 Chrome 上尝试我的代码时,FormDataContentDisposition.getFileName() 很好。

于 2016-09-01T18:58:31.100 回答