阿里云对象存储(OSS)使用小结

本文为使用OSS对象存储小结,无广告之嫌。

相关技术文档链接:https://help.aliyun.com/document_detail/31955.html?spm=a2c4g.11186623.6.1002.44bf6212HiMG95

一.创建javaOSS上传工具类

需要导入的jar包在网站有,需要注意的是,httpclient.jar和httpcore.jar的版本需要保持一致,不然会上传出错。slf4j.jar 系列的也需要保持一致,上代码。

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import org.apache.log4j.Logger;
/**
 * 
* @ClassName: OSSUpload
* @Description: OSS文件上传工具类
* @author shadow
* @date 2018年8月16日 上午10:04:38
 */
public class OSSUpload {
    static Logger logger = Logger.getLogger(OSSUpload.class);

    // 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”。
    //如果使用是阿里云服务器,则可以使用 oss-cn-xxxxxxx-internal.aliyuncs.com 进行内网上传
    //private static String endpoint = "oss-cn-xxxxxxx-internal.aliyuncs.com";
    private static String endpoint = "oss-cn-xxxxxxx.aliyuncs.com";

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

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

   
    /**
     * 
    * @Title: putObjectByByte
    * @Description: 上传文件
    * @param @param filePath 文件路径,需要创建次级目录直接拼接,OSS会根据路径自动创建 ,如 aaa/bbb/ccc.jpg 
    * 				如果不存在aaa或bbb则OSS会自动创建.命名规范如下:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    * @param @param data byte[] 文件byte流
    * @param @return    设定文件
    * @return boolean    返回类型
    * @throws
     */
    public static void putObjectByByte(String filePath,byte[] data) {
    	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	ossClient.putObject(bucketName, filePath, new ByteArrayInputStream(data));
    	ossClient.shutdown();
    }
    
    /**
     * 
    * @Title: deleteObject
    * @Description: 删除文件
    * @param @param filePath 文件路径
    * @return void    返回类型
    * @throws
     */
    public static void deleteObject(String filePath) {
    	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	ossClient.deleteObject(bucketName, filePath);
    	ossClient.shutdown();
    }
    
    /**
     * 
    * @Title: putObjectByInputStream
    * @Description: 上传文件
    * @param @param filePath
    * @param @param inputStream  文件流
    * @return void    返回类型
    * @throws
     */
    public static void putObjectByInputStream(String filePath,InputStream inputStream) {
    	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	ossClient.putObject(bucketName, filePath, inputStream);
    	ossClient.shutdown();
    }
    
    /**
     * 
    * @Title: putObjectByFile
    * @Description: 上传文件
    * @param @param filePath
    * @param @param file    本地文件
    * @return void    返回类型
    * @throws
     */
    public static void putObjectByFile(String filePath,File file) {
    	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	ossClient.putObject(bucketName, filePath, file);
    	ossClient.shutdown();
    }
    /**
     * 
    * @Title: downloadObjectToStringBuilder
    * @Description: 下载文件-流式下载
    * @param @param filePath
    * @param @return    设定文件
    * @return StringBuilder    返回类型
    * @throws
     */
    public static StringBuilder downloadObjectToStringBuilder(String filePath) {
    	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	StringBuilder objectContent = null;
        try {
           OSSObject ossObject = ossClient.getObject(bucketName, filePath);
           InputStream inputStream = ossObject.getObjectContent();
           objectContent = new StringBuilder();
           BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            while (true) {
                String line = reader.readLine();
                if (line == null)
                    break;
                objectContent.append(line);
            }
            inputStream.close();
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
        return objectContent;
    }

    /**
     * 
    * @Title: downloadObjectToFile
    * @Description: 下载文件到本地
    * @param @param ossFilePath oss上的文件路径
    * @param @param newFilePath 本地文件路径
    * @return void    返回类型
    * @throws
     */
    public static void downloadObjectToFile(String ossFilePath,String newFilePath) {
    	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(newFilePath));
    	ossClient.shutdown();
    }
}

如果不关掉apache.http日志的debug打印,每次上传都会打印出二进制字符串,非常多,非常耗日志存储,也影响调试。在日志配置文件中添加 ,将打印等级变成INFO即可。

<logger name="org.apache.http" level="INFO"/>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值