阿里云oss

package oss.utils;


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.youanmi.scrm.commons.util.file.PropertiesUtils;
import com.youanmi.scrm.commons.util.string.AssertUtils;




/**
 * OSS工具类
 * 
 * @author guohao 2017年3月6日
 * @version 1.0.0
 */
public class OSSUnit1 {


    // log
    private static final Logger LOG = LoggerFactory.getLogger(OSSUnit1.class);


    // 阿里云API的内或外网域名
    private static String ENDPOINT = "oss-cn-shenzhen.aliyuncs.com";
    // 阿里云API的密钥Access Key ID
    private static String ACCESS_KEY_ID = "******";
    // 阿里云API的密钥Access Key Secret
    private static String ACCESS_KEY_SECRET = "******";


    // 空间
    public static String BUCKET_NAME;
    // 文件存储目录
    public static String DISK_NAME;


    public static String HOST;




    /**
     *
     * 获取classpath
     *
     * @return
     */
    public static String getClassPath() {
        URL url = OSSUnit.class.getClassLoader().getResource("");
        return url.getPath();
    }




    /**
     *
     * 初始化
     *
     * @param fileName
     */
    public static void build(String fileName) {


        // 获取OSS配置
        Properties pros = PropertiesUtils.getProperties(fileName);
        ENDPOINT = pros.getProperty("endpoint");
        ACCESS_KEY_ID = pros.getProperty("accessKeyId");
        ACCESS_KEY_SECRET = pros.getProperty("accessKeySecret");
        BUCKET_NAME = pros.getProperty("bucketName");
        DISK_NAME = formatDateTime(pros.getProperty("diskName"));
        HOST = pros.getProperty("ossHost");
        if (AssertUtils.isNull(ENDPOINT) || AssertUtils.isNull(ACCESS_KEY_ID)
                || AssertUtils.isNull(ACCESS_KEY_SECRET) || AssertUtils.isNull(BUCKET_NAME)
                || AssertUtils.isNull(DISK_NAME) || AssertUtils.isNull(HOST)) {
            throw new RuntimeException("OSS配置文件配置属性没有找到");
        }




    }




    private static String formatDateTime(String path){
        if(path==null){
            return path;
        }
        return path.replaceAll("\\$\\{year\\}", new SimpleDateFormat("yyyy").format(new Date()))
                .replaceAll("\\$\\{month\\}", new SimpleDateFormat("MM").format(new Date()))
                .replaceAll("\\$\\{day\\}", new SimpleDateFormat("dd").format(new Date()))
                .replaceAll("\\$\\{hours\\}", new SimpleDateFormat("HH").format(new Date()))
                .replaceAll("\\$\\{minutes\\}", new SimpleDateFormat("mm").format(new Date()))
                .replaceAll("\\$\\{seconds\\}", new SimpleDateFormat("ss").format(new Date()));
    }




    /**
     * 获取阿里云OSS客户端对象
     * */
    public static final OSSClient getOSSClient() {
        return new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
    }




    /**
     * 新建Bucket --Bucket权限:私有
     * 
     * @param bucketName
     *            bucket名称
     * @return true 新建Bucket成功
     * */
    public static final boolean createBucket(OSSClient client, String bucketName) {
        Bucket bucket = client.createBucket(bucketName);
        return bucketName.equals(bucket.getName());
    }




    /**
     * 删除Bucket
     * 
     * @param bucketName
     *            bucket名称
     * */
    public static final void deleteBucket(OSSClient client, String bucketName) {
        client.deleteBucket(bucketName);
        LOG.info("删除" + bucketName + "Bucket成功");
    }




    /**
     * 向阿里云的OSS存储中存储文件
     * 
     * @param client
     *            OSS客户端
     * @param file
     *            上传文件
     * @param bucketName
     *            bucket名称
     * @param diskName
     *            上传文件的目录 --bucket下文件的路径
     * @return String 唯一MD5数字签名
     * */
    public static final String uploadObject2OSS(OSSClient client, File file, String bucketName,
            String diskName) {
        String resultStr = null;
        try {
            InputStream is = new FileInputStream(file);
            String fileName = file.getName();
            Long fileSize = file.length();
            // 创建上传Object的Metadata
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentLength(is.available());
            metadata.setCacheControl("no-cache");
            metadata.setHeader("Pragma", "no-cache");
            metadata.setContentEncoding("utf-8");
            metadata.setContentType(getContentType(fileName));
            // metadata.setContentDisposition("filename/filesize=" + fileName +
            // "/" + fileSize + "Byte.");
            // 上传文件
            PutObjectResult putResult = client.putObject(bucketName, diskName + fileName, is, metadata);
            // 解析结果
            resultStr = putResult.getETag();
        }
        catch (Exception e) {
            LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);
        }
        return resultStr;
    }




    /**
     * 根据key获取OSS服务器上的文件输入流
     * 
     * @param client
     *            OSS客户端
     * @param bucketName
     *            bucket名称
     * @param diskName
     *            文件路径
     * @param key
     *            Bucket下的文件的路径名+文件名
     */
    public static final InputStream getOSS2InputStream(OSSClient client, String bucketName, String diskName,
            String key) {
        OSSObject ossObj = client.getObject(bucketName, diskName + key);
        return ossObj.getObjectContent();
    }




    /**
     * 根据key删除OSS服务器上的文件
     * 
     * @param client
     *            OSS客户端
     * @param bucketName
     *            bucket名称
     * @param diskName
     *            文件路径
     * @param key
     *            Bucket下的文件的路径名+文件名
     */
    public static void deleteFile(OSSClient client, String bucketName, String diskName, String key) {
        client.deleteObject(bucketName, diskName + key);
        LOG.info("删除" + bucketName + "下的文件" + diskName + key + "成功");
    }




    /**
     * 通过文件名判断并获取OSS服务文件上传时文件的contentType
     * 
     * @param fileName
     *            文件名
     * @return 文件的contentType
     */
    public static final String getContentType(String fileName) {
        String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
        if ("bmp".equalsIgnoreCase(fileExtension))
            return "image/bmp";
        if ("gif".equalsIgnoreCase(fileExtension))
            return "image/gif";
        if ("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)
                || "png".equalsIgnoreCase(fileExtension))
            return "image/jpeg";
        if ("html".equalsIgnoreCase(fileExtension))
            return "text/html";
        if ("txt".equalsIgnoreCase(fileExtension))
            return "text/plain";
        if ("vsd".equalsIgnoreCase(fileExtension))
            return "application/vnd.visio";
        if ("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension))
            return "application/vnd.ms-powerpoint";
        if ("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension))
            return "application/msword";
        if ("xml".equalsIgnoreCase(fileExtension))
            return "text/xml";
        return "text/html";
    }




    public static void main(String[] args) {
        OSSClient oss = getOSSClient();
        File file = new File("F:\\66666.png");
        String bucketName = "kotdev";
        String diskName = "datas/image/";
        String result = uploadObject2OSS(oss,file,bucketName,diskName);
        
        //http://kotdev.oss-cn-shenzhen.aliyuncs.com/datas/image/66666.png
        System.out.println(result);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值