1. 程式人生 > >Java開發七牛雲端儲存 ,上傳視訊與圖片檔案 , 頁面播放器GrindPlayer.swf

Java開發七牛雲端儲存 ,上傳視訊與圖片檔案 , 頁面播放器GrindPlayer.swf

七牛的雲端儲存還是比較強大的 , 可以上傳檔案(什麼格式都可以) , 而且還可以對上傳的檔案進行轉碼等操作.
我在專案中用到的也只是很小的一部分.

七牛上傳檔案需要四個引數:
這裡寫圖片描述

一.註冊完賬號以後會生成兩個密匙 AccessKey , SecretKey

這裡寫圖片描述

二.具體的API操作

七牛的API個人看來怪怪的 , 他的引數什麼的都是 /引數名/引數值這樣一次類推的拼接的 , 可能是因為用不同的語言開發的吧

前提工作maven要引入七牛的兩個jar包

<!--七牛雲端儲存-->
    <dependency>
        <groupId
>
com.qiniu</groupId> <artifactId>sdk</artifactId> <version>6.1.0</version> </dependency> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version
>
[7.2.0, 7.2.99]</version> </dependency>

import java.io.File;
import java.io.InputStream;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.qiniu.api.auth.AuthException;
import com.qiniu.api.auth.digest.Mac;
import
com.qiniu.api.config.Config; import com.qiniu.api.io.IoApi; import com.qiniu.api.io.PutExtra; import com.qiniu.api.io.PutRet; import com.qiniu.api.rs.GetPolicy; import com.qiniu.api.rs.PutPolicy; import com.qiniu.api.rs.URLUtils; import com.qiniu.common.QiniuException; import com.qiniu.common.Zone; import com.qiniu.http.Response; import com.qiniu.processing.OperationManager; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.model.FileInfo; import com.qiniu.util.Auth; import com.qiniu.util.StringMap; import com.qiniu.util.UrlSafeBase64; import com.wqdian.common.entity.media.QiNiuMedia; /** * 七牛雲端儲存的視訊檔案上傳 和視訊轉碼工具等 * * @author "[email protected]" */ @Service public class QiniuMediaUtilService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private String bucketName; private String domain; private String accessKey = ""; private String secretKey = ""; public static final String JPG = ".jpg"; public static final String FLV = ".flv"; /** * 初始化引數設定 */ public QiniuMediaUtilService() { QiNiuMedia niuMedia = QiNiuMedia.getInstance(); this.domain = niuMedia.getDomain(); this.bucketName = niuMedia.getBucketName(); this.accessKey = niuMedia.getAccessKey(); this.secretKey = niuMedia.getSecretKey(); // 設定AccessKey Config.ACCESS_KEY = niuMedia.getAccessKey(); // 設定SecretKey Config.SECRET_KEY = niuMedia.getSecretKey(); } /** * 通過檔案路徑上傳檔案 * * @param localFile * 檔案的所在路徑 * @throws AuthException * @throws JSONException * @uesr "[email protected]" * @date 2016年11月19日下午3:20:44 */ public boolean uploadFile(String localFile) throws AuthException, JSONException { File file = new File(localFile); return uploadFile(file); } /** * 通過檔案流上傳 * * @param file * 檔案流 * @throws AuthException * @throws JSONException * @uesr "[email protected]" * @date 2016年11月19日下午3:21:51 */ public boolean uploadFile(File file) throws AuthException, JSONException { long startTime = System.currentTimeMillis();// 獲取當前時間 String uptoken = getUpToken(); // 可選的上傳選項,具體說明請參見使用手冊。 PutExtra extra = new PutExtra(); // 上傳檔案 PutRet ret = IoApi.putFile(uptoken, file.getName(), file.getAbsolutePath(), extra); if (ret.ok()) { logger.info("視訊檔案上傳成功!"); long endTime = System.currentTimeMillis(); logger.info("視訊檔案上傳用時:" + (endTime - startTime) + "ms"); return true; } else { logger.error("視訊檔案上傳失敗!"); return false; } } /** * 從 inputstream 中寫入七牛 * @param fileName 檔名 * @param content 要寫入的內容 * @return * @throws AuthException * @throws JSONException */ public boolean uploadFile(String fileName,InputStream in) throws AuthException, JSONException { long startTime = System.currentTimeMillis();// 獲取當前時間 // 讀取的時候按的二進位制,所以這裡要同一 /*ByteArrayInputStream inputStream = new ByteArrayInputStream( content.getBytes());*/ String uptoken = getUpToken(); // 可選的上傳選項,具體說明請參見使用手冊。 PutExtra extra = new PutExtra(); // 上傳檔案 PutRet ret = IoApi.Put(uptoken, fileName, in, extra); if (ret.ok()) { logger.info("視訊檔案上傳成功!"); long endTime = System.currentTimeMillis(); logger.info("視訊檔案上傳用時:" + (endTime - startTime) + "ms"); return true; } else { logger.error("視訊檔案上傳失敗!"); return false; } } /** * 獲得下載地址 * 這個獲取的就是你上傳檔案資源的連結 * @param filename * @return * @throws Exception * @uesr "[email protected]" * @date 2016年11月19日下午3:23:23 */ public String getFileResourceUrl(String filename) throws Exception { String downloadUrl = ""; if (filename != null) { Mac mac = getMac(); String baseUrl = URLUtils.makeBaseUrl(domain, filename); GetPolicy getPolicy = new GetPolicy(); downloadUrl = getPolicy.makeRequest(baseUrl, mac); } return downloadUrl; } /** * 七牛上將檔案刪除 * @param fileName * @uesr "[email protected]" * @date 2016年11月22日下午1:29:13 */ public void delete(String fileName) { Auth auth = Auth.create(accessKey, secretKey); Zone z = Zone.zone0(); Configuration c = new Configuration(z); // 例項化一個BucketManager物件 BucketManager bucketManager = new BucketManager(auth, c); // 要測試的空間和key,並且這個key在你空間中存在 String bucket = bucketName; String key = fileName; try { // 呼叫delete方法移動檔案 bucketManager.delete(bucket, key); logger.info("檔案刪除成功!.[fileName={}]", fileName); } catch (QiniuException e) { logger.error("檔案刪除失敗!.[fileName={}]", fileName); // 捕獲異常資訊 Response r = e.response; logger.error(r.toString()); } } /** * 獲取憑證 * * @throws AuthException * @throws JSONException * @uesr "[email protected]" * @date 2016年11月19日下午3:26:34 */ private String getUpToken() throws AuthException, JSONException { Mac mac = getMac(); PutPolicy putPolicy = new PutPolicy(bucketName); String uptoken = putPolicy.token(mac); return uptoken; } /** * 操作許可 * * @uesr "[email protected]" * @date 2016年11月19日下午3:27:01 */ private Mac getMac() { Mac mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY); return mac; } /** * 七牛的視訊截圖 * * @param fileName * 要截圖檔名稱 * @param format * 截圖的型別(jpg.png) * @uesr "[email protected]" * @date 2016年11月21日下午2:43:42 */ public String qiNiuMediaPrtScreen(String fileName, String format) { String screenPic = ""; long startTime = System.currentTimeMillis();// 獲取當前時間 // 身份驗證 Auth auth = Auth.create(accessKey, secretKey); Zone z = Zone.zone0(); Configuration c = new Configuration(z); // 新建一個OperationManager物件 OperationManager operater = new OperationManager(auth, c); // 設定要截圖的空間和key,並且這個key在你空間中存在(key就是檔案的名字) String bucket = bucketName; String key = fileName; // 設定截圖操作引數 String fops = "vframe/" + format + "/offset/1/w/640/h/480/rotate/auto"; // 設定截圖的佇列 String pipeline = bucketName; // 可以對截圖後的檔案進行使用saveas引數自定義命名,當然也可以不指定檔案會預設命名並儲存在當前空間。 String str = fileName.substring(0, fileName.indexOf(".")); String urlbase64 = UrlSafeBase64.encodeToString(bucketName + ":" + str + "." + format); String pfops = fops + "|saveas/" + urlbase64; // 設定pipeline引數 StringMap params = new StringMap().putWhen("force", 1, true) .putNotEmpty("pipeline", pipeline); try { String persistid = operater.pfop(bucket, key, pfops, params); screenPic = this.getFileResourceUrl(str + "." + format); logger.info("視訊截圖成功.[persistid={}]", persistid); } catch (QiniuException e) { Response r = e.response;// 捕獲異常資訊 logger.info(r.toString());// 請求失敗時簡單狀態資訊 try { logger.info(r.bodyString());// 響應的文字資訊 } catch (QiniuException e1) { logger.error(e1.getMessage()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } long endTime = System.currentTimeMillis(); logger.info("擷取視訊截圖用時:" + (endTime - startTime) + "ms"); return screenPic; } /** * 七牛的視訊轉碼 * @param fileName 要轉換的檔名稱 * @param format 要轉成的視訊格式 * @uesr "[email protected]" * @date 2016年11月21日下午2:43:42 */ public String qiNiuTransCodeToAny(String fileName, String format) { long startTime = System.currentTimeMillis();// 獲取當前時間 // 身份驗證 Auth auth = Auth.create(accessKey, secretKey); Zone z = Zone.zone0(); Configuration c = new Configuration(z); // 新建一個OperationManager物件 OperationManager operater = new OperationManager(auth, c); // 設定要轉碼的空間和key,並且這個key在你空間中存在(key就是檔案的名字) String bucket = bucketName; String key = fileName; // 設定轉碼操作引數 String fops = "avthumb/" + format + "/s/640x360/vb/1.25m"; // 設定轉碼的佇列 String pipeline = bucketName; // 可以對轉碼後的檔案進行使用saveas引數自定義命名,當然也可以不指定檔案會預設命名並儲存在當前空間。 String str = fileName.substring(0, fileName.indexOf(".")); String urlbase64 = UrlSafeBase64.encodeToString(bucketName + ":" + str + "." + format); String pfops = fops + "|saveas/" + urlbase64; // 設定pipeline引數 StringMap params = new StringMap().putWhen("force", 1, true) .putNotEmpty("pipeline", pipeline); try { String persistid = operater.pfop(bucket, key, pfops, params); logger.info("視訊轉碼成功.[persistid={}]", persistid); } catch (QiniuException e) { Response r = e.response;// 捕獲異常資訊 logger.info(r.toString());// 請求失敗時簡單狀態資訊 try { logger.info(r.bodyString());// 響應的文字資訊 } catch (QiniuException e1) { logger.error("視訊轉碼失敗={}", e1.getMessage()); } } long endTime = System.currentTimeMillis(); logger.info("視訊轉碼用時:" + (endTime - startTime) + "ms"); return str + "." + format; } /** * 判斷檔案是否存在 * @param fileName 檔名 * @uesr "[email protected]" * @date 2016年11月21日下午6:38:03 */ public boolean isExist(String fileName) { boolean flag = false; // 身份驗證 Auth auth = Auth.create(accessKey, secretKey); Zone z = Zone.zone0(); Configuration c = new Configuration(z); // 例項化一個BucketManager物件 BucketManager bucketManager = new BucketManager(auth, c); // 要測試的空間和key,並且這個key在你空間中存在 String bucket = bucketName; String key = fileName; try { // 呼叫stat()方法獲取檔案的資訊 FileInfo info = bucketManager.stat(bucket, key); if (info.hash != null) { flag = true; } logger.info("視訊檔案資訊.[hash={},key={}]", info.hash, info.key); } catch (QiniuException e) { // 捕獲異常資訊 Response r = e.response; logger.error("視訊檔案不存在={}", r.toString()); } return flag; }

這個是自己寫的封裝類 , 這裡設定你註冊賬號的各項引數

/**
 * 
 * @author "[email protected]"
 */
public class QiNiuMedia {

    private static QiNiuMedia media = null;
    public static final String ACCESSKEY = "*************";
    public static final String SECRETKEY = "*************";
    public static final String BUCKETNAME = "*************";
    public static final String DOMAIN = "*************";
    private String accessKey;// 設定accessKey
    private String secretKey;// 設定secretKey
    private String bucketName;// 設定儲存空間
    private String domain;// 設定七牛域名

    public String getAccessKey() {
        return accessKey;
    }

    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }

    public String getSecretKey() {
        return secretKey;
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }

    public String getDomain() {
        return domain;
    }

    public void setDomain(String domain) {
        this.domain = domain;
    }

    /**
     * 例項化一個QiNiuMedia例項
     * @uesr "[email protected]"
     * @date 2016年11月19日下午2:58:27
     */
    public static synchronized QiNiuMedia getInstance() {
        if (media == null) {
            media = new QiNiuMedia();
            media.setAccessKey(ACCESSKEY);
            media.setSecretKey(SECRETKEY);
            media.setBucketName(BUCKETNAME);
            media.setDomain(DOMAIN);
        }
        return media;
    }
}

三.頁面的播放器

資料的問題解決完了接下來就是 , 頁面的播放了 , 我用了一個頁面的flvplayer.swf播放器 .下邊是html的程式碼

需要將flvplayer.swf 放到專案目錄中

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
            codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"
            width="500" height="400">
            <param name="movie"
                value="${memresctx}/js/jwplayer-7.7.1/tools/flvplayer.swf" />
            <param name="quality" value="high">
            <param name="allowScriptAccess" value="always">
            <param name="wmode" value="opaque">
            <param name="align" value="middle">
            <param name="bgcolor" value="#000000">
            <param name="swLiveConnect" value="true">
            <param name="loop" value="true">
            <param name="play" value="true">
            <param name="DeviceFont" value="false">
            <param name="allowFullScreen" value="true">
            <param name="menu" value="true">
            ///這裡我用的都是絕對路徑
            <embed src="${memresctx}/js/jwplayer-7.7.1/tools/flvplayer.swf"
                allowfullscreen="true"
                flashvars="vcastr_file=${memresctx}/js/jwplayer-7.7.1/tools/中國合夥人.flv|${memresctx}/js/jwplayer-7.7.1/tools/屌絲男士.mov"
                quality="high"
                pluginspage="http://www.macromedia.com/go/getflashplayer"
                type="application/x-shockwave-flash" width="854" height="480"></embed>
        </object>

這裡寫圖片描述

頁面的效果是這樣的 , 但是總是感覺有點醜 .

然後我又找了一個播放器 GrindPlayer.swf

// 引入一個js
<script type="text/javascript" src="http://yandex.st/swfobject/2.2/swfobject.min.js"></script>
<script type="text/javascript">
    var flashvars = {
        /* src : "${url}", */
        src : "${memresctx}/js/jwplayer-7.7.1/tools/Forrest Gump IMAX.mp4",
    };
    var params = {
        allowFullScreen : true,
        allowScriptAccess : "always",
        bgcolor : "#000000"
    };
    var attrs = {
        name : "player"
    };

    swfobject.embedSWF("${memresctx}/js/jwplayer-7.7.1/GrindPlayer.swf",
            "player", "854", "480", "10.2", null, flashvars, params, attrs);
</script>

然後再頁面在加入這個
<div id="player"></div>

Ok了 , 這個就可以顯示了.如下圖:\
這裡寫圖片描述

相關推薦

Java開發雲端儲存 ,視訊圖片檔案 , 頁面播放GrindPlayer.swf

七牛的雲端儲存還是比較強大的 , 可以上傳檔案(什麼格式都可以) , 而且還可以對上傳的檔案進行轉碼等操作. 我在專案中用到的也只是很小的一部分. 七牛上傳檔案需要四個引數: 一.註冊完賬號以後會生成兩個密匙 AccessKey , Secr

雲端儲存自有證書開啟https訪問

 雖然七牛雲端儲存也提供免費SSL證書申請,但在我們都在阿里雲申請了免費SSL證書,正準備在七牛上傳,彈出的介面卻讓我傻了眼,如下圖所示:          阿里雲免費SSL證書提供了不同伺服器環境的版本,有Apache、Nginx

Spring 使用雲端儲存圖片以及html5圖片壓縮

需求: 最近在做專案的時候採用了多模組的方案 前臺是一個系統 後臺是另一個系統 在做圖片上傳的時候有個問題 如果想之前那樣前臺系統的圖片儲存的自己的web應用目錄下 後臺系統是沒法訪問的 (直接寫死路徑不太好) 這裡我想到了兩個方案 方案一:自己搭建

雲端儲存檔案

折騰了一個晚上,終於在 2016-08-06 00:56:22 這個是重要的時間點成功的上傳了一張圖片,看了好多篇部落格,收益都不是很大,但有了個大致的瞭解。 這http://doc.okbase.net/zrdjqc/archive/169474.html這篇部落格中,

雲端儲存部署iOS應用

可能很多人都用過Dropbox,但是很不幸,它最近被有關部門封了。其實,我很想知道封它的理由,但是也不關心,只是有點憤慨。所以,找到國內的七牛。在此也非常感謝七牛,它真得很幫開發者們很多忙;感謝的話嘛,不能說多,轉入正題,如何利用七牛部署iOS應用: 第一步:

雲端儲存 qiniu 測試域名被回收 檔案備份 批量下載

Markdown版本筆記 我的GitHub首頁 我的部落格 我的微信 我的郵箱 MyAndroidBlogs baiqiantao bai

java 檔案雲端儲存的demo

maven     引用 網上maven伺服器 以及最新版的maven依賴 <repositories> <repository> <id>public</id> <!-- <url>

雲端儲存java圖片

1、註冊七牛雲端儲存賬號 2、新增物件儲存 3、新建java或javaWeb專案 匯入七牛雲端儲存需要jar包 gson okhttp okio qiniu-java-sdk-7.1.3.jar 4、檔案上傳程式碼 package main; imp

springboot(7)——圖片/檔案雲端儲存

一、七牛雲快速入門 快速入門 1、註冊賬號 2、建立儲存空間, 命名xyz對應下面springboot 應用配置bucket 3、建立成功後進入該空間,獲取該空間的測試域名,對應下面springboot 應用配置中的path 4、點選“個人面板—金鑰管理

laravel5中使用雲端儲存圖片

安裝 composer require itbdw/laravel-storage-qiniuconfig/app.php 裡面的 providers 加上一行  itbdw\QiniuStorage\QiniuFilesystemServiceProvider::cl

base64圖片雲端儲存

簡單的說一下需求:將canvas繪畫生成的圖片上傳至七牛。 用canvas生成的圖片是base64編碼,上傳base64編碼圖片到七牛雲公開的介面如下: POST /putb64/<Fsize>/key/<EncodedKey>/

nodejs使用雲端儲存檔案

nodejs 使用七牛雲端儲存上傳檔案 在網上尋找了很多七牛雲端儲存的博文,也百度了許多。但是都不盡如人意,因此自個擼一個小示例。 1-準備工作 確認安裝node和np

雲端儲存圖片【PHP】

由於七牛雲端儲存使用了名稱空間USE,名稱空間是在PHP5.3才引入的,所以5.3之前的版本會報錯的哦 第一、下載七牛雲端儲存SDK對應的PHP版本 第二、解壓檔案(我重新命名為了qiniusdk),放到專案根目錄 第三、確定上傳檔案的機制(HTML上傳,後臺上傳) 第四、

雲端儲存之覆蓋

概述: 本地檔案修改,然後需要覆蓋在七牛儲存空間原本已經存在的檔案,那麼這時需要使用七牛提供的覆蓋上傳; 問題: 如何實現,以及實現思路? 2.遵照七牛的開發規範,獲取Auth——-》獲取token——》執行覆蓋上傳的業務邏輯——》檢視結果 示例如下:

雲端儲存客戶端(本人開發,開源)

直接不廢話,開源地址:https://github.com/wjs5943283/QiNiuBucketClientQiNiu bucket Client 簡單的七牛儲存客戶端,增加了批量下載功能, 使用wpf 基於 .net framework 4.0 下載Dubug.zip直接使用,填寫AK和S

tp5.0整合雲圖片

分享 http 沒有 ger cti str get res 文件名 這裏以上傳圖片為例 上傳其他文件也是大同小異 使用composer安裝gmars/tp5-qiniu 安裝成功則在vendor目錄下多出一個目錄 這個目錄含有整合七牛雲的所有類包等文件 控制器中添加up

.NET Core項目----雲圖片

arp logs each 重命名 setting ext except his input 在引用官方的qiniu.core的nuget是總是發生錯誤,錯誤如下,所以就在網上找到了一種解決方案,並稍微改進了一番, 以下是引用圖: 第一步:引用nuget(是位大神寫

阿里雲的OSS雲端儲存 檔案

第一次使用阿里雲的雲端儲存,mark一下 1.首先,你需要申請購買到AccessKey 和 AccessKeySecret。 因許可權問題,建議開通單獨的RAM帳號 在雲服務中開啟新建一個bucket空間,用於儲存上傳的檔案儲存位置 2.編碼工作開始: 1)maven中引入ja

OneinStack定時同步備份資料庫/網站至雲端儲存方法

第一、準備工作 1、建立七牛雲端儲存空間 我們需要有七牛雲賬戶且建立一個私有云儲存空間。 2、獲取七牛金鑰 我們需要獲取七牛雲端儲存賬戶的AccessKey/SecretKey,因為等會需要對接使用。 3、升級最新版本 ./upgrade.sh oneinstack 我們需要升級至最

iOS整合雲(圖片視訊,音訊等檔案

用的CocoaPods匯入SDK platform :ios,'9.0' target '專案名' do pod 'AFNetworking' pod 'Qiniu' end 匯入標頭檔案 #import<QiniuSDK.h> #i