1. 程式人生 > >Java oss上傳圖片

Java oss上傳圖片

package com.moli.common.utils;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

import org.apache.log4j.Logger;

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;  
  
/** 
 * @class:AliyunOSSClientUtil 
 * @descript:java使用阿里雲OSS儲存物件上傳圖片 
 * @date:2017年3月16日 下午5:58:08 
 * @author wangqi 
 */  
public class AliyunOSSClientUtil {  
    //log日誌  
    private static Logger logger = Logger.getLogger(AliyunOSSClientUtil.class);  
    //阿里雲API的內或外網域名  
    private static String ENDPOINT;  
    //阿里雲API的金鑰Access Key ID  
    private static String ACCESS_KEY_ID;  
    //阿里雲API的金鑰Access Key Secret  
    private static String ACCESS_KEY_SECRET;  
    //阿里雲API的bucket名稱  
    private static String BACKET_NAME;  
    //阿里雲API的資料夾名稱  
    private static String FOLDER;  
    //初始化屬性  
    static{  
    	ENDPOINT = "";
        ACCESS_KEY_ID = "";  
        ACCESS_KEY_SECRET = "";  
        BACKET_NAME = "";  
        FOLDER = "";
    }  
      
    /** 
     * 獲取阿里雲OSS客戶端物件 
     * @return ossClient 
     */  
    public static  OSSClient getOSSClient(){  
        return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);  
    }  
  
    /** 
     * 建立儲存空間 
     * @param ossClient      OSS連線 
     * @param bucketName 儲存空間
     * @return 
     */  
    public  static String createBucketName(OSSClient ossClient,String bucketName){  
        //儲存空間  
        final String bucketNames=bucketName;  
        if(!ossClient.doesBucketExist(bucketName)){  
            //建立儲存空間  
            Bucket bucket=ossClient.createBucket(bucketName);  
            logger.info("建立儲存空間成功");  
            return bucket.getName();  
        }  
        return bucketNames;  
    }  
      
    /** 
     * 刪除儲存空間buckName 
     * @param ossClient  oss物件 
     * @param bucketName  儲存空間 
     */  
    public static  void deleteBucket(OSSClient ossClient, String bucketName){    
        ossClient.deleteBucket(bucketName);     
        logger.info("刪除" + bucketName + "Bucket成功");    
    }    
      
    /** 
     * 建立模擬資料夾 
     * @param ossClient oss連線 
     * @param bucketName 儲存空間 
     * @param folder   模擬資料夾名如"qj_nanjing/" 
     * @return  資料夾名 
     */  
    public  static String createFolder(OSSClient ossClient,String bucketName,String folder){  
        //資料夾名   
        final String keySuffixWithSlash =folder;  
        //判斷資料夾是否存在,不存在則建立  
        if(!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)){  
            //建立資料夾  
            ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));  
            logger.info("建立資料夾成功");
            //得到資料夾名
            OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);
            String fileDir=object.getKey();
            return fileDir;
        }
        return keySuffixWithSlash;
    }  
      
     /**   
        * 根據key刪除OSS伺服器上的檔案   
        * @param ossClient  oss連線 
        * @param bucketName  儲存空間  
        * @param folder  模擬資料夾名 如"qj_nanjing/" 
        * @param key Bucket下的檔案的路徑名+檔名 如:"upload/cake.jpg" 
        */      
       public static void deleteFile(OSSClient ossClient, String bucketName, String folder, String key){      
            ossClient.deleteObject(bucketName, folder + key);     
            logger.info("刪除" + bucketName + "下的檔案" + folder + key + "成功");    
       }   
      
    /** 
     * 上傳圖片至OSS 
     * @param ossClient  oss連線 
     * @param file 上傳檔案(檔案全路徑如:D:\\image\\cake.jpg) 
     * @param bucketName  儲存空間 
     * @param folder 模擬資料夾名 如"qj_nanjing/" 
     * @return String 返回的唯一MD5數字簽名 
     * */  
    public static URL uploadObject2OSS(File file) {
    	String bucketName = BACKET_NAME;
    	String folder = FOLDER;
    	URL url = null;
    	//初始化OSSClient  
        OSSClient ossClient=AliyunOSSClientUtil.getOSSClient(); 
        try {  
            //以輸入流的形式上傳檔案  
            InputStream is = new FileInputStream(file);
            String path = file.getName();
            String fileName =path.substring(path.lastIndexOf("\\")+1);
            String type=path.substring(path.lastIndexOf(".")+1);
            int random = (int)(Math.random()*900)+10000;
            //檔名  
            String fileNameNew = fileName.replace(fileName, String.valueOf(System.currentTimeMillis())+String.valueOf(random)+"."+type);
            //檔案大小  
            Long fileSize = file.length();   
            //建立上傳Object的Metadata
            ObjectMetadata metadata = new ObjectMetadata();
            //上傳的檔案的長度
            metadata.setContentLength(is.available());
            //指定該Object被下載時的網頁的快取行為
            metadata.setCacheControl("no-cache");
            //指定該Object下設定Header
            metadata.setHeader("Pragma", "no-cache");
            //指定該Object被下載時的內容編碼格式  
            metadata.setContentEncoding("utf-8");
            //檔案的MIME,定義檔案的型別及網頁編碼,決定瀏覽器將以什麼形式、什麼編碼讀取檔案。如果使用者沒有指定則根據Key或檔名的副檔名生成,  
            //如果沒有副檔名則填預設值application/octet-stream  
            metadata.setContentType(getContentType(fileNameNew));    
            //指定該Object被下載時的名稱(指示MINME使用者代理如何顯示附加的檔案,開啟或下載,及檔名稱)  
            metadata.setContentDisposition("filename/filesize=" + fileNameNew + "/" + fileSize + "Byte.");    
            //上傳檔案   (上傳檔案流的形式)  
            PutObjectResult putResult = ossClient.putObject(bucketName, folder + fileNameNew, is, metadata);    
            //解析結果
            url = getUrl(ossClient,putResult.getETag());
        } catch (Exception e) {  
            e.printStackTrace();  
             logger.error("上傳阿里雲OSS伺服器異常." + e.getMessage(), e);    
        }  
        return url;  
    }  
  
    /** 
     * 通過檔名判斷並獲取OSS服務檔案上傳時檔案的contentType 
     * @param fileName 檔名 
     * @return 檔案的contentType 
     */  
    public static  String getContentType(String fileName){  
        //檔案的字尾名  
        String fileExtension = fileName.substring(fileName.lastIndexOf("."));  
        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 "image/jpeg";  
    }  
    
    public static URL getUrl(OSSClient ossClient,String key) {
        // 設定URL過期時間為10年
        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = ossClient.generatePresignedUrl(BACKET_NAME, key, expiration);
        return url;
      }
    
    //測試
    public static void main(String[] args) {
        //初始化OSSClient
        //上傳檔案
        String files="E:\\timg.jpg";
        String[] file=files.split(",");
        for(String filename:file){
            File filess=new File(filename);
            URL url = AliyunOSSClientUtil.uploadObject2OSS(filess);
            //上傳後的檔案MD5數字唯一簽名:40F4131427068E08451D37F02021473A
            System.out.println(url);
        }
    }  
      
      
}


相關推薦

Java oss圖片

package com.moli.common.utils; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.

Java專案整合阿里雲OSS圖片

工具類: import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import org.slf4j.Lo

使用阿裏雲OSS,圖片時報錯:java.lang.ClassNotFoundException:org.apache.http.ssl.TrustStrategy

inf dex cep 更新 ttpClient 時報 .com oss str 問題產生的原因就是jar包版本問題,阿裏的SDk引入的pom中依賴的httpclient和httpcore版本高於當前項目中已經設置的版本。    解決:   刪除低版本後,更新下項目。使用阿

Java之~ 圖片壓縮,圖片壓縮,圖片旋轉方法工具類

package com.javajy.util; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; import jav

Vue+Element-ui+OSS 圖片

1、安裝Element-ui npm i element-ui -s 2、安裝阿里雲的OSS npm install ali-oss 3、專案使用了Element-ui裡面的上傳元件(元件程式碼來自Element-ui官網) action:檔案上傳的地址; on-

關於阿里雲oss圖片之後會被旋轉90度的解決辦法

問題描述:正常的圖片前端上傳到oss成功之後的資源地址。在html上引用的時候被旋轉了90度oss資源地址直接在瀏覽器開啟就不會旋轉問題原因:某些手機拍攝出來的照片可能帶有旋轉引數(存放在照片exif資訊裡面)。而oss資源上傳之後會預設自適應方向所以在img標籤中圖片就被旋轉了90度。 解決辦法:阿里雲給

OSS圖片時報錯:SSL certificate problem: unable to get local issuer certificate

php在curl的時候報此錯誤: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcur

PHP使用阿里OSS圖片

//商品新增 public function cmy_add() { if (Request::instance()->isPost()) { $data = input("post.");

spring boot 整合oss 圖片、檔案

前排宣告: 本文章 整合修改自https://blog.csdn.net/hcjsjqjssm/article/details/80977735 部落格 一是自己以後回顧,二希望可以幫助到使用此功能的同學,假使幫助到了你,可以點個贊,留個言,如果有不成功的 也可以留言 一起解決下

JAVA簡單圖片至七牛

utils package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import com.qiniu.common.QiniuException; import com.qiniu.common.Zone; imp

java web圖片時,顯示圖片

js指令碼<script>    function setImagePreview() {        var docObj = document.getElementById("doc");        var imgObjPreview = documen

java生成圖片的縮圖

# public class ToImg { # public static void main(String[] args) throws Exception { # toSmaillImg("untitled.bmp","thumb.bm

nginx 安裝到Java程式碼圖片利用ftp過程遇到的問題總結

      第一次接觸伺服器的自己就是一個小白鼠,自然會遇到很多問題:     一、ftp連線不上    1.按照 https://blog.csdn.net/weixin_37525569/article/details/80839067 這篇部落格寫的步驟安裝ftp,可以

OSS圖片,檔案或者其他流

1.匯入阿里雲oss的jar包,maven配置如下:<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifact

FastDFS(fdfs)遇到的坑之一,本地fastdfs-client-java開發圖片報錯:java.net.SocketTimeoutException: connect timed out

前置: 我在伺服器上配置了FDFS服務, 伺服器上上傳等測試都通過了,沒問題,後來到本地開發, 用fastdfs-client-java-1.27.jar開發包來連結伺服器,上傳圖片報錯: java.net.SocketTimeoutException: connect

Android Oss 圖片的使用

code小生,一個 Android 領域技術分享平臺作者:喵主子的陽光連結:https://ww

七牛雲 Java Web圖片

本文由黑殼網原創 殼叔搞笑一刻 沒有對手 警官抓到正在賭博的四個人。“你們知道這是犯法的嗎?”警官向第一個人怒吼道。 “不,我只是在這裡看看。” 警官又問第二個人:“你呢?” “我是在等候巴士而已。 第三個也插嘴:“警官,我是在這裡等我

OSS圖片

後臺package com.xiaohe.qd.controller; import java.io.File; import java.io.InputStream; import java.util.Random; import javax.servlet.http

Java前端圖片到後臺

使用通用的SSM框架,maven構建; 簡單記錄一下前端檔案上傳到後臺的過程,免得到處找; spring-mvc.xml加入配置,這裡還可以加入檔案的編碼格式defaultEncoding屬性配置; <bean id="multipartResolver" cl

JAVA 圖片至阿里OSS儲存庫

1.建立一個工具類OSSUtil.java,程式碼如下: package com.qyrj.util; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.PutObjectRequest; import java.io.By