上传文件并进行判断

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值