1.使用tika判断文件类型
Tika是什么
我们都知道,普通的文件后缀校验并不能校验出这个文件的类型,大部分的文件类型校验都是通过获取文件的魔数来判断文件的类型,因为对于大多数类型文件来说他的魔数是固定的(例如class文件的魔数就是:CA FE )所以目前大部分网络上找到的处理方案是将各个文件的魔数放倒Map集合中,然后通过获取文件的魔数,从Map集合查找对应的文件类型。但是同类型的文件的魔数真的都是固定的么?事实上并不是这样的,mp4文件的魔数就不是固定的。那就是意味着,你放了一个mp4的魔数,下次检测mp4文件的时候并不能保证校验通过!
1.引入依赖
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.28.1</version>
</dependency>
2.测试
public class Test {
public static void main(String[] args) throws IOException, TikaException {
Tika tika = new Tika();
String mimeType = tika.detect(new File("G:\\test.png"));
System.out.println(mimeType);
}
}
输出:image/png
通过tika自带的detect()方法我们可以对查找出来文件真实的mime类型(mime类型是前面是文件的大类型,后面是文件的小类型)
2.书写OSS上传文件的工具级
public class OssManagerUtils {
//个人开发id
private static final String accessKeyId = "";
//开发密匙
private static final String accessKeySecret = "";
/**
* 需要修改的存储空间的名称
*/
private static final String endpoint = "http://oss-cn-beijing.aliyuncs.com";
public static final String bucket = "letstalkresource";
public static final String bucketDomain="";
private static OSS client;
static {
client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上传图片
* @param fileName 图片名称,图片名称包括文件夹名称和“/”
* @param length 图片大小
* @param content 输入流
*/
public static void uploadImage(String fileName, long length, InputStream content) {
uploadBucketFile(bucket, fileName, length, content);
}
/**
* 上传文件
* @param bucket 存储空间名
* @param fileName 文件名(包括文件夹名称和“/”)
* @param length 流的长度
* @param content 输入流
*/
public static void uploadBucketFile(String bucket, String fileName, long length, InputStream content) {
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(length);
// 上传Object.
client.putObject(bucket, fileName, content, meta);
}
//删除文件
public static boolean deleteFile(String fileName) {
//判断文件是否存在
boolean exist = client.doesObjectExist(bucket, fileName);
//文件不存在删除失败
if ( ! exist){
return false;
}
//执行删除
client.deleteObject(bucket, fileName);
return true;
}
public static String getUrl(String fileName) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
URL url = client.generatePresignedUrl(bucket, fileName, expiration);
if (url != null) {
return url.toString();
}
return null;
}
}