2013-10-03 49 views
7

我正在使用泽西文件上传文件,但我只需要文件名。 Internet Explorer发送整个路径,并且根据FormDataContentDisposition中的内容,Jersey分析出斜杠,所以我甚至不能解析它。谢谢。如何获得只有泽西文件上传的文件名

回答

2

听起来像一个棘手的问题。理想的情况当然是抓住包含斜杠的字符串,并使用string.split!

如果失败了,我可以开始思考的唯一策略是尝试遍历字符串,看看文件夹是否存在字符串的第一部分的各种长度等。这可能会导致问题,但如果您打算查找一个文件夹“MyFolder(2)”,还有一个“MyFolder”。我不知道很多球衣,但我会建议试着找到一种不同的方式来抓住你需要的字符串。

+3

谢谢。我最终做的是向文件输入标记添加一个更改事件,并在其中解析出文件名,因为此时它仍然有斜杠,并将该值保存到隐藏的输入中。随后隐藏的输入会与表单的其余部分一起提交。 – kombat

+0

很高兴看到您能够解决它。 – Drifter64

+1

添加这个问题的答案,而不是把它放在评论,所以它会更适用 –

1
  1. 更改事件添加到文件输入标签
  2. 解析出文件名,因为它仍然有在这一点上
  3. 棒斜线该值装入一个隐藏的输入

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


@kombat已找到该解决方案并将其作为注释发布。为了更好,这是现在转贴为社区维基答案。

0

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

0

这是泽西岛的一个bug。在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头指定的规则进行转义。正好相反,有撰文指出:

内容处置不是HTTP标准的一部分,但由于它 被广泛实施,我们将记录其使用和风险 实现者。

此错误早已在新泽西州的实际版本的类org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide一个丑陋的解决方法,但它不与IE 11和边缘,因为它会检查它已经改变了用户代理部分的工作。有一个修正请求:https://github.com/jersey/jersey/pull/233/files,但将近2年没有人关心合并它。

你有3个解决方案:

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

2)改变泽西其它框架,其中,所述开发人员采取的兼容性问题更严重的是代替集中手动最大化代码重用等等

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

相关问题