java 操作阿里云 OSS

来源:互联网 发布:淘宝售前客服是做什么? 编辑:程序博客网 时间:2024/06/10 15:08
package com.rayclear.oss;

import java.io.InputStream;

import java.net.URL;
import java.util.Date;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

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

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.AppendObjectRequest;
import com.aliyun.oss.model.AppendObjectResult;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
/**
 * oss操作类
 *
 */
public class OssManage {
    private static final Logger LOGGER = LoggerFactory.getLogger(OssManage.class);
    private static  String ACCESS_KEY_ID  = null;
    private static  String  ACCESS_KEY_SECRET = null;
    private static  String  ENDPOINT = null;
    private static  String  BUCKETNAME = null;
    //private static  String  BUCKETNAME_VIDEO = null;
    private static String OUT_OF_DATE = null;
    private static  OSSClient client  = null;
    private static  ObjectMetadata meta = null;
    static{
        try {
            ResourceBundle bundle = PropertyResourceBundle.getBundle("oss");  
            ACCESS_KEY_ID  = bundle.getString("OSS_ACCESS_KEY_ID");
            ACCESS_KEY_SECRET = bundle.getString("OSS_ACCESS_KEY_SECRET");
            ENDPOINT = bundle.getString("OSS_ENDPOINT");
            BUCKETNAME = bundle.getString("OSS_BUCKETNAME");
            //BUCKETNAME_VIDEO = bundle.getString("OSS_BUCKETNAME_VIDEO");
            OUT_OF_DATE = bundle.getString("OSS_OUT_OF_DATE");
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }
    }
     
    public static void init(){
        // 初始化一个OSSClient
        client = new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        meta = new ObjectMetadata();
    }
     
    /**
     * @Description: 上传文件到OSS文件服务器
     * @param content  文件流
     * @param key    上传为OSS文件服务器的唯一标识
     * @param mimeType  文档类型
     * @throws Exception
     * @ReturnType:String   OSSObject的ETag值。
    */
    public static String  uploadFile(InputStream content,String key,String mimeType) throws Exception{
        //进行初始化
        init();
        // 必须设置ContentLength
        meta.setContentType(mimeType);
        // 上传Object.
        LOGGER.info("*****************上传图片到oss服务器开始*****************" + key);
        PutObjectResult result = client.putObject(BUCKETNAME, key, content, meta);
        LOGGER.info("*****************上传图片到oss服务器结束*****************" + key);
        return result.getETag();
    }
     
 
 
    /**
     * @Description: 根据key获取oss服务器上的图片地址
     * @param key
     * @return
     * @ReturnType:String
    */
    public static String getImgURl(String key){
        init();
        Date expires = new Date (new Date().getTime() + Integer.parseInt(OUT_OF_DATE)); // 30 minute to expire
        GeneratePresignedUrlRequest generatePresignedUrlRequest ;
//        if(key.startsWith("msplatform")){
//            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);
//        }else {
//            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);
//        }
        generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);
        generatePresignedUrlRequest.setExpiration(expires);
        URL url = client.generatePresignedUrl(generatePresignedUrlRequest);
        return url.toString();
    }
    /**
     * @Description:根据key获取oss服务器上的ipa文件地址
     * @param key
     * @return
     * @ReturnType:String
     */
    public static String getIpaURl(String key){
        init();
        Date expires = new Date(new Date().getTime()+ 10*365*24*3600*1000);
        GeneratePresignedUrlRequest generatePresignedUrlRequest ;
//        if(key.startsWith("msplatform")){
//            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);
//        }else {
//            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);
//        }
        generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);
        generatePresignedUrlRequest.setExpiration(expires);
        URL url = client.generatePresignedUrl(generatePresignedUrlRequest);
        return url.toString();
    }
     
    /**
     * @Description: 根据key获取oss服务器上的图片地址
     * @param key
     * @return
     * @ReturnType:String
    */
    public static InputStream  getObject(String key){
        init();
        OSSObject object = null;
//        if(key.startsWith("msplatform")){
//            object= client.getObject(BUCKETNAME, key);
//        }else{
//            object= client.getObject(BUCKETNAME_VIDEO, key);
//        }
        object= client.getObject(BUCKETNAME, key);
        object.getObjectMetadata().getContentType();
        // 获取Object的输入流
        InputStream objectContent = object.getObjectContent();
         
     
        return objectContent;
    }
     
     
    /**
     * @Description:删除文件
     * @param key  OSS文件服务器上文件的唯一标识
     * @ReturnType:void
    */
    public static void deleteFile(String key){
        init();
        client.deleteObject(BUCKETNAME, key);
    }
     
     
    /**
     * @Description: 断点上传文件到OSS文件服务器
     * @param content  文件流
     * @param key    上传为OSS文件服务器的唯一标识
     * @param position 位置
    */
    public static String  appendObjectFile(InputStream content,String key,int position,String mimeType) throws Exception{
       //进行初始化
        init();
        // 必须设置ContentLength
        meta.setContentLength(position);
        meta.setContentType(mimeType);
        meta.setCacheControl("no-cache");
        meta.setContentEncoding("utf-8");
        // 上传
        LOGGER.info("*****************断点上传图片到oss服务器开始*****************" + key);
        AppendObjectRequest appendObjectRequest = new AppendObjectRequest(BUCKETNAME, key, content, meta);
        appendObjectRequest.setPosition(Long.valueOf(position));
        AppendObjectResult appendObjectResult =client.appendObject(appendObjectRequest);
        LOGGER.info("*****************断点上传图片到oss服务器结束*****************" + key);
        return appendObjectResult.getNextPosition().toString();
    }
    /**  
     * 通过文件名判断并获取OSS服务文件上传时文件的contentType  
     * @param fileName 文件名
     * @return 文件的contentType    
     */    
     public static 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) {
        String imgURl = OssManage.getImgURl("u=1103657041,2822108077&fm=26&gp=0.jpg");
        String ipaURl = OssManage.getIpaURl("u=1103657041,2822108077&fm=26&gp=0.jpg");
        System.out.println(imgURl);
        System.out.println(ipaURl);
    }

}



自己的service实现类里的方法   做个记录

@Override
    @Transactional
    public Channels createChannel(String name, String description, MultipartFile file) {
        Channels channel = new Channels();
        channel.setLogo("ic_c.png");
        // TODO 创建者id
        //channel.setAgentId("");
        channel.setCreatedAt(new Date());
        channel.setUpdatedAt(new Date());
        channel.setName(name);
        channel.setDescription(description);
        channelsMapper.insertSelective(channel);
        try {

              //oss 操作调用 

              OssManage.uploadFile(file.getInputStream(), "images/v3/channels/"+channel.getId()+"/ic_c.png", OssManage.getContentType("ic_c.png"));
        } catch (Exception e) {
            throw new RuntimeException("》》》》》》》》》》》》》》》》》oss 图片上传失败");
        }
       
        return channel;
    }