1
arseBurger OP 在吗? 看看题 : (
|
2
arseBurger OP 99 可怜的新手
|
3
gz911122 2019-02-01 12:12:59 +08:00
不是 我就想问问文件存 MongoDB 是什么操作
这玩意不应该都是存静态资源服务器,cdn 啥的吗 |
5
undeflife 2019-02-01 12:30:36 +08:00
打不开是什么效果?没有后缀? 还是内容有问题?
String fileType = file.getContentType();这里的 fileType 是对的吗 下载后的文件 hash 对吗? |
6
arseBurger OP @undeflife 感谢回复,fileType 是存到 GridFs 里的文件后缀名,如下记录:
{ "filename" : "3514bd478bbe476b8628daa5d2f03156", "aliases" : null, "chunkSize" : NumberLong(261120), "uploadDate" : ISODate("2019-01-31T05:20:51.364+0000"), "length" : NumberLong(6035), "_id" : ObjectId("5c5285b32293366f443d190d"), "contentType" : "txt", "md5" : "06d90ff5b133aceecd080fdcff475b1b" } 我试了一下下载 FileSystem 上的文件同样有这个问题,应该可以排除 mongodb 存储的问题了 |
7
arseBurger OP @undeflife ....修改一下...FileSystem 上的文件下载只有 Txt 能正常打开,其他的还是不行 :(
这段是判断文件类型的方法: /** * 根据制定文件的文件头判断其文件类型 * * @param * @return */ public static String getFileType(InputStream inputStream) { String res = null; try { byte[] b = new byte[10]; inputStream.read(b, 0, b.length); String fileCode = bytesToHexString(b); System.out.println(fileCode); //这种方法在字典的头代码不够位数的时候可以用但是速度相对慢一点 Iterator<String> keyIter = FILE_TYPE_MAP.keySet().iterator(); while (keyIter.hasNext()) { String key = keyIter.next(); if (key.toLowerCase().startsWith(fileCode.toLowerCase()) || fileCode.toLowerCase().startsWith(key.toLowerCase())) { res = FILE_TYPE_MAP.get(key); break; } } } catch (IOException e) { e.printStackTrace(); } return res; } 这段是匹配 MediaType 的方法: /** * @param fileType * @return */ public static MediaType getEnableStr(String fileType) { if (IMAGE_TYPES.contains(fileType)) { return MediaType.valueOf("image/" + fileType); } else if (PDF_TYPES.contains(fileType)) { return MediaType.APPLICATION_PDF; } else if (TXT_TYPES.contains(fileType)) { return MediaType.TEXT_PLAIN; } else { return MediaType.APPLICATION_OCTET_STREAM; } } |
8
undeflife 2019-02-01 13:55:42 +08:00
@arseBurger 不是 你一直没表达清楚的是 "无法打开" 是浏览器直接打开 还是下载到本地后不能打开? 不能打开又是什么效果?
|
9
arseBurger OP @undeflife 嗯嗯,不好意思,我没表述清楚,是下载到本地后无法打开,照片类型的提示无法打开此文件,doc 文档提示发现有无法读取的内容,mp4 文件提示此文件无法播放。这可能是因为文件类型不受支持、文件扩展名不正确或文件已损坏。
|
10
undeflife 2019-02-01 16:12:31 +08:00
@arseBurger 你的代码我没细看 粗看没太大问题 我觉得你比对文件在各个装下的 md5 是不是都一致
另外我记得 gridfs 的封装里 contentType 这个字段本身就是 MIME type 感觉你这部分处理有点不对 甚至直接作为附件的文件后缀了. |