Java中使用OSS

本文介绍如何在Java环境中使用OSS(Object Storage Service),包括导入必要的库,配置连接参数,并提供工具类的编写概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java中使用OSS的工具类

先导入OSS的包

	<dependency>
		<groupId>com.aliyun.oss</groupId>
		<artifactId>aliyun-sdk-oss</artifactId>
		<version>3.10.2</version>
	</dependency>

创建OSS对象需要的参数

	// endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket,请在控制台上查看域名。
    // 如果您还没有创建Bucket,endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”,
    // 链接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
    // endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://后不带bucket名称,
    // 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是错误的endpoint,请去掉其中的“bucket-name”。
    // 带有internal的是OSS的内网地址,
    // 例如“http://oss-cn-hangzhou-internal.aliyuncs.com”,表示是杭州的内网地址,只能通过数据中心在杭州的ECS访问,或者是配置NGINX做转发
    private static String endpoint = "http://oss-cn-hangzhou-internal.aliyuncs.com";

    // accessKeyId和accessKeySecret是OSS的访问密钥,您可以在控制台上创建和查看,
    // 创建和查看访问密钥的链接地址是:https://ak-console.aliyun.com/#/。
    // 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
    private static String accessKeyId = "**************";
    private static String accessKeySecret = "*****************";

    // Bucket用来管理所存储Object的存储空间,详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
    // Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
    // 图片的访问路径是https://bucketName.endpoint/XXXXXXX.jpg
    private static String bucketName = "draw-map";

编写工具类

/**
     * OSS 文件上传
     *
     * @param fileDir 完整的本地路径  例:  /mnt/rongchuang/upload_resource/spot/imgs/2020/02/26/xxxxxxx.png
     * @param file    要上传的文件对象
     * @return
     */
    public static Boolean uploadFile(String fileDir, File file) {

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        boolean flag = true;
        try {
            // 上传
            InputStream input = new FileInputStream(file);
            ossClient.putObject(bucketName, fileDir, input);
            // 关闭client
            ossClient.shutdown();
        } catch (OSSException oe) {
            flag = false;
            oe.printStackTrace();
        } catch (ClientException ce) {
            flag = false;
            ce.printStackTrace();
        } catch (FileNotFoundException e) {
            flag = false;
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
        return flag;
    }


    /**
     * @return String
     * @MethodName: contentType
     * @Description: 获取文件类型
     */
    private static String contentType(String fileType) {
        fileType = fileType.toLowerCase();
        String contentType = "";
        if (fileType.equals("bmp")) {
            contentType = "image/bmp";

        } else if (fileType.equals("gif")) {
            contentType = "image/gif";

        } else if (fileType.equals("png") || fileType.equals("jpeg") || fileType.equals("jpg")) {
            contentType = "image/jpeg";

        } else if (fileType.equals("html")) {
            contentType = "text/html";

        } else if (fileType.equals("txt")) {
            contentType = "text/plain";

        } else if (fileType.equals("vsd")) {
            contentType = "application/vnd.visio";

        } else if (fileType.equals("ppt") || fileType.equals("pptx")) {
            contentType = "application/vnd.ms-powerpoint";

        } else if (fileType.equals("doc") || fileType.equals("docx")) {
            contentType = "application/msword";

        } else if (fileType.equals("xml")) {
            contentType = "text/xml";

        } else if (fileType.equals("mp4")) {
            contentType = "video/mp4";

        } else {
            contentType = "application/octet-stream";

        }
        return contentType;
    }

    /**
     *
     * @MethodName: deleteFile
     * @Description: 单文件删除
     * @param fileUrl 需要删除的文件url
     * @return boolean 是否删除成功
     */
    public static boolean deleteFile(String fileUrl){

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            boolean exist = ossClient.doesObjectExist(bucketName, fileUrl);
            if (!exist) {
                return false;
            }
            ossClient.deleteObject(bucketName, fileUrl);
        } catch (Exception oe) {
            oe.printStackTrace();
            return false;
        } finally {
            ossClient.shutdown();
        }
        return true;
    }


    /**
     * 生成文件名
     * @return
     */
    public static String getFileName(String dirName, String fileName){

        String root = LoadBase.getUPOAD_PATH();
        System.out.println(root);
        String d = LoadBase.getDateDir();
        String dir = LoadBase.getRESOURCE_REWRITE_DIR() + File.separator
                + dirName;
        String newFileName = getNewName(fileName);
        System.out.println(newFileName);
        return (dir + d + newFileName).replace(File.separator, "/");
    }

    public static String getNewName(String uploadFileFileName) {
        String extension = FilenameUtils.getExtension(uploadFileFileName);
        StringBuffer fileRandomName = new StringBuffer();
        fileRandomName.append(RandomName.ConfirmId(20));
        fileRandomName.append(".");
        fileRandomName.append(extension);
        return fileRandomName.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值