如何只使用Jersey File Upload获取文件名

时间:2013-10-03 16:09:36

标签: java file-upload jersey

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  1. 将更改事件添加到文件输入标记
  2. 解析文件名,因为此时仍有斜线
  3. 将该值粘贴到隐藏的输入中
  4. 然后,隐藏的输入将与表单的其余部分一起提交。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是泽西岛的一个错误。在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标准的一部分,但是因为它   广泛实施,我们正在记录其使用和风险   实现者。

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

你有3个解决方案:

1)Aplly a' fix'在客户端,这是恕我直言的错误方法,因为在客户端没有错误,该错误在泽西!

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

3)手动修补球衣。下载源代码,应用pull请求,使用修改后的版本号进行编译和发布。