我正在使用Jersey进行文件上传,但我只需要文件名。 Internet Explorer发送整个路径,并根据FormDataContentDisposition中的内容,Jersey解析斜杠,所以我甚至无法解析它。感谢。
答案 0 :(得分:2)
听起来像是一个棘手的问题。理想的情况当然是抓住包含斜杠的字符串,然后使用string.split!
如果做不到这一点,我可以开始考虑的唯一策略就是尝试遍历字符串,看看文件夹是否存在于字符串第一部分的各种长度等等。如果你打算找到一个,这也会引起问题。文件夹“MyFolder(2)”,还有一个“MyFolder”。我不太了解球衣,但我建议尝试找一种不同的方法来抓住你需要的绳子。
答案 1 :(得分:1)
然后,隐藏的输入将与表单的其余部分一起提交。
@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请求,使用修改后的版本号进行编译和发布。