摘要:前言需要安裝插件。而不是通過圖片標簽然后轉換后獲取。推薦是一個基于的完整的獨立的微服務。僅僅需要創建相關數據表,修改數據庫的連接信息,你就可以得到一個微服務。
前言
需要安裝lombok插件。
功能列表上傳本地文件
上傳Base64圖片
獲取文件訪問地址
上傳MultipartFile
代碼 pom.xmlqiniu.propertiescom.qiniu qiniu-java-sdk [7.2.0, 7.2.99] org.projectlombok lombok 1.18.2 provided
# 七牛云配置 qiniu.access-key=你的accessKey qiniu.secret-key=你的secretKey qiniu.bucket=你的存儲空間名稱 # [{"zone0":"華東"}, {"zone1":"華北"},{"zone2":"華南"},{"zoneNa0":"北美"},{"zoneAs0":""}] qiniu.zone=zone0 qiniu.domain-of-bucket=外鏈默認域名 # 鏈接過期時間,單位是秒,3600代表1小時,-1代表永不過期 qiniu.expire-in-seconds=-1QiNiuConfig.java
import com.qiniu.common.Zone; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.util.Properties; /** * 七牛云配置 * * @author simon * @create 2018-08-15 10:44 **/ @Slf4j @Data public class QiNiuConfig { private String accessKey; private String secretKey; private String bucket; private Zone zone; private String domainOfBucket; private long expireInSeconds; private static QiNiuConfig instance = new QiNiuConfig(); private QiNiuConfig(){ Properties prop = new Properties(); try { prop.load(QiNiuConfig.class.getResourceAsStream("/qiniu.properties")); accessKey = prop.getProperty("qiniu.access-key"); secretKey = prop.getProperty("qiniu.secret-key"); bucket = prop.getProperty("qiniu.bucket"); domainOfBucket = prop.getProperty("qiniu.domain-of-bucket"); expireInSeconds = Long.parseLong(prop.getProperty("qiniu.expire-in-seconds")); String zoneName = prop.getProperty("qiniu.zone"); if(zoneName.equals("zone0")){ zone = Zone.zone0(); }else if(zoneName.equals("zone1")){ zone = Zone.zone1(); }else if(zoneName.equals("zone2")){ zone = Zone.zone2(); }else if(zoneName.equals("zoneNa0")){ zone = Zone.zoneNa0(); }else if(zoneName.equals("zoneAs0")){ zone = Zone.zoneAs0(); }else{ throw new Exception("Zone對象配置錯誤!"); } } catch (Exception e) { e.printStackTrace(); } } public static QiNiuConfig getInstance(){ return instance; } public static void main(String[] args) { System.out.println(QiNiuConfig.getInstance().getAccessKey()); } }QiNiuUtil.java
import com.google.gson.Gson; import com.qiniu.common.QiniuException; import com.qiniu.http.Response; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import com.qiniu.util.UrlSafeBase64; import lombok.extern.slf4j.Slf4j; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; /** * 七牛上傳下載工具類 * * @author simon * @create 2018-08-15 11:21 **/ @Slf4j public class QiNiuUtil { /** * 上傳本地文件 * @param localFilePath 本地文件完整路徑 * @param key 文件云端存儲的名稱 * @param override 是否覆蓋同名同位置文件 * @return */ public static boolean upload(String localFilePath, String key, boolean override){ //構造一個帶指定Zone對象的配置類 Configuration cfg = new Configuration(QiNiuConfig.getInstance().getZone()); //...其他參數參考類注釋 UploadManager uploadManager = new UploadManager(cfg); //...生成上傳憑證,然后準備上傳 Auth auth = Auth.create(QiNiuConfig.getInstance().getAccessKey(), QiNiuConfig.getInstance().getSecretKey()); String upToken; if(override){ upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆蓋上傳憑證 }else{ upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket()); } try { Response response = uploadManager.put(localFilePath, key, upToken); //解析上傳成功的結果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); System.out.println(putRet.key); System.out.println(putRet.hash); return true; } catch (QiniuException ex) { Response r = ex.response; System.err.println(r.toString()); try { System.err.println(r.bodyString()); } catch (QiniuException ex2) { //ignore return false; } return false; } } /** * 上傳Base64圖片 * @param l 圖片沒經過base64處理的原圖字節大小,獲取文件大小的時候,切記要通過文件流的方式獲取。而不是通過圖片標簽然后轉換后獲取。 * @param file64 圖片base64字符串 * @param key 文件云端存儲的名稱 * @param override 是否覆蓋同名同位置文件 * @return * @throws IOException */ public static boolean uploadBase64(int l, String file64, String key, boolean override) throws IOException{ /*FileInputStream fis = null; int l = (int) (new File(localFilePath).length()); byte[] src = new byte[l]; try { fis = new FileInputStream(new File(localFilePath)); fis.read(src); }catch (FileNotFoundException e){ e.printStackTrace(); log.error(e.getMessage()); log.error("圖片文件讀取失敗"); return false; } String file64 = Base64.encodeToString(src, 0);*/ Auth auth = getAuth(); String upToken; if(override){ upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆蓋上傳憑證 }else{ upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket()); } String url = "http://upload.qiniup.com/putb64/" + l+"/key/"+ UrlSafeBase64.encodeToString(key); //非華東空間需要根據注意事項 1 修改上傳域名 RequestBody rb = RequestBody.create(null, file64); Request request = new Request.Builder(). url(url). addHeader("Content-Type", "application/octet-stream") .addHeader("Authorization", "UpToken " + upToken) .post(rb).build(); //System.out.println(request.headers()); OkHttpClient client = new OkHttpClient(); okhttp3.Response response = client.newCall(request).execute(); //System.out.println(response); return response.isSuccessful(); } /** * 獲取文件訪問地址 * @param fileName 文件云端存儲的名稱 * @return * @throws UnsupportedEncodingException */ public static String fileUrl(String fileName) throws UnsupportedEncodingException { String encodedFileName = URLEncoder.encode(fileName, "utf-8"); String publicUrl = String.format("%s/%s", QiNiuConfig.getInstance().getDomainOfBucket(), encodedFileName); Auth auth = getAuth(); long expireInSeconds = QiNiuConfig.getInstance().getExpireInSeconds(); if(-1 == expireInSeconds){ return auth.privateDownloadUrl(publicUrl); } return auth.privateDownloadUrl(publicUrl, expireInSeconds); } /** * 上傳MultipartFile * @param file * @param key * @param override * @return * @throws IOException */ public static boolean uploadMultipartFile(MultipartFile file, String key, boolean override) { //構造一個帶指定Zone對象的配置類 Configuration cfg = new Configuration(QiNiuConfig.getInstance().getZone()); //...其他參數參考類注釋 UploadManager uploadManager = new UploadManager(cfg); //把文件轉化為字節數組 InputStream is = null; ByteArrayOutputStream bos = null; try { is = file.getInputStream(); bos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int len = -1; while ((len = is.read(b)) != -1){ bos.write(b, 0, len); } byte[] uploadBytes= bos.toByteArray(); Auth auth = getAuth(); String upToken; if(override){ upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket(), key);//覆蓋上傳憑證 }else{ upToken = auth.uploadToken(QiNiuConfig.getInstance().getBucket()); } //默認上傳接口回復對象 DefaultPutRet putRet; //進行上傳操作,傳入文件的字節數組,文件名,上傳空間,得到回復對象 Response response = uploadManager.put(uploadBytes, key, upToken); putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); System.out.println(putRet.key);//key 文件名 System.out.println(putRet.hash);//hash 七牛返回的文件存儲的地址,可以使用這個地址加七牛給你提供的前綴訪問到這個視頻。 return true; }catch (QiniuException e){ e.printStackTrace(); return false; }catch (IOException e) { e.printStackTrace(); return false; } } public static Auth getAuth(){ Auth auth = Auth.create(QiNiuConfig.getInstance().getAccessKey(), QiNiuConfig.getInstance().getSecretKey()); return auth; } }推薦
oauthserver是一個基于Spring Boot Oauth2的完整的獨立的Oauth2 Server微服務。僅僅需要創建相關數據表,修改數據庫的連接信息,你就可以得到一個Oauth2 Server微服務。
gitee版本
github版本
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76748.html
摘要:注冊成功后會返回注冊用戶的此就是上面說到的,用于用戶登陸的基礎,請保管好。 地址 https://github.com/billyhoomm...http://blog.billyhu.com 說明(Instructions) 本項目后臺基于express、mongodb,前臺基于Vue2.0全家桶、bootstrap、scss預編譯器以及一眾工具類插件 項目前后臺代碼在同一個目錄中...
摘要:注冊成功后會返回注冊用戶的此就是上面說到的,用于用戶登陸的基礎,請保管好。 地址 https://github.com/billyhoomm...http://blog.billyhu.com 說明(Instructions) 本項目后臺基于express、mongodb,前臺基于Vue2.0全家桶、bootstrap、scss預編譯器以及一眾工具類插件 項目前后臺代碼在同一個目錄中...
摘要:注冊成功后會返回注冊用戶的此就是上面說到的,用于用戶登陸的基礎,請保管好。 地址 https://github.com/billyhoomm...http://blog.billyhu.com 說明(Instructions) 本項目后臺基于express、mongodb,前臺基于Vue2.0全家桶、bootstrap、scss預編譯器以及一眾工具類插件 項目前后臺代碼在同一個目錄中...
摘要:月日下午,趙之健在七牛架構師實踐日第二十九期進行了多維度融合賦能視頻的實踐為題的實戰分享。本文主要分享了七牛人工智能實驗室在視頻方面的一些工作,分別有兩個關鍵詞一個是多維度融合,另外一個關鍵詞是視頻。 6 月 30 日下午,趙之健在七牛架構師實踐日第二十九期進行了《多維度融合賦能視頻 AI 的實踐》為題的實戰分享。? 作者簡介:?showImg(https://segmentfault...
摘要:七牛云接入本系統的圖片,音視頻是放在七牛云,所以需要接入七牛云。在服務端通過接口請求來獲取七牛云上傳,客戶端獲取到七牛云,通過不同方案將帶上。 效果展示 showImg(https://user-gold-cdn.xitu.io/2018/8/26/16576a709bd02f5f?w=1409&h=521&f=gif&s=30128195); showImg(https://user...
閱讀 1458·2021-11-24 09:39
閱讀 1775·2021-11-22 15:25
閱讀 3728·2021-11-19 09:40
閱讀 3283·2021-09-22 15:31
閱讀 1288·2021-07-29 13:49
閱讀 1192·2019-08-26 11:59
閱讀 1308·2019-08-26 11:39
閱讀 919·2019-08-26 11:00