因为阿里云上传是统一接口我没办法更改,故将验证加到了文件上传完FTP之后再去验证,结果。。。结果。。。搞了三天依旧没搞定,掉头发啊,这还怎么玩,无奈,求救度娘吧,各种查阅,各种尝试,然并卵,OSS返回的流文件和FTP获取的流文件一直不一样,这。。。挠破头皮也想不到怎么肥事啊,想到快要交差了,紧张。。。再百度,茅塞顿开,输入流在第二次使用的时候会失效,也就是说只能用一次,那次已经用在了上传FTP上,那如果把流存起来,这样不就可以一直去使用了,于是,就找了一个方法如下:
/**
* 保存流对象(输入流在第二次使用的时候会失效)
* 在需要用到InputStream的地方再封装成InputStream
* ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buf);
* Workbook wb = new HSSFWorkbook(byteArrayInputStream);//byteArrayInputStream 继承了InputStream,故这样用并没有问题
* 如果只需要用到一次inputstream流,就不用这样啦,直接用就OK
* @param ins
*/
public byte[] saveaIns(InputStream ins){
byte[] buf = null;
try {
if(ins!=null){
buf = org.apache.commons.io.IOUtils.toByteArray(ins);
}
} catch (IOException e) {
e.printStackTrace();
}
return buf;
}
这样,用的时候再new ByteArrayInputStream(buf)转成InputStream就可以无限次使用了。
/**
* 比较文件是否相同
* @param inputStream1 OSS流文件
* @param inputStream2 FTP流文件
* @return
*/
public static boolean fileEqualsMD5(InputStream inputStream1, InputStream inputStream2) {
boolean result = true;
try {
String fileDigest1 = DigestUtils.md5DigestAsHex(inputStream1);
String fileDigest2 = DigestUtils.md5DigestAsHex(inputStream2);
// 都为空也算不同文件
if (fileDigest1 == null || !fileDigest1.equals(fileDigest2)) {
result = false;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}