最近测试的同学反馈问题说使用平台的报bug上传视频的附件以后,然后在jira上确没有办法通过点击附件进行预览,而需要下载下来才能够查看。但是如果是直接在jira上进行上传附件就不会有这个问题
如果说不了解具体原因的,其实就会觉得这个问题非常的有意思,因为就是一个文件上传,为啥还能够导致一个能够在浏览器打开预览,而一个不行呢。
带着这个问题,可能我们先了解一个问题就是 **🚢🚢🚢 浏览器打开图片链接为什么有时候是预览有时候是下载 这篇文章其实就很好的解释了为什么会出现这样子的现象,归根到底是因为 Content-Disposition
的原因,
但是以上的内容还是没有解释上传的过程中有什么问题,还是看下 jiraClient的上传文件的实际是什么样的吧。
private JSON request(HttpEntityEnclosingRequestBase req, File file)
throws RestException, IOException {
if (file != null) {
File fileUpload = file;
req.setHeader("X-Atlassian-Token", "nocheck");
MultipartEntity ent = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null,
Charset.forName("UTF-8"));
ent.addPart("file", new FileBody(fileUpload, "application/octet-stream", "UTF-8"));
req.setEntity(ent);
}
return request(req);
}
这个地方有一个地方比较明显也就是 new FileBody(fileUpload, "application/octet-stream", "UTF-8"));
这个地方是在设置文件的MIME
, 那是因为这个的原因吗?
所以确实是因为这个类型导致的, 所以不应该直接写死这个值,应该要根据具体的文件进行处理即可了。这里就不做详细说明 ,贴具体的代码改动就好了
private JSON request(HttpEntityEnclosingRequestBase req, File file) throws RestException, IOException {
if (file != null) {
req.setHeader("X-Atlassian-Token", "nocheck");
MultipartEntity ent = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, (String)null, Charset.forName("UTF-8"));
Tika tika = new Tika();
String mimeType = tika.detect(file);
ent.addPart("file", new FileBody(file, mimeType, "UTF-8"));
req.setEntity(ent);
}
return this.request(req);
}
结论
Java jiraClient上传附件不能在浏览器预览的问题通常是由于MIME类型不正确造成的。通过找到MIME类型并将其修改为正确的类型,我们可以轻松地解决这个问题。