1. 程式人生 > >安卓+七牛雲的第三方圖片儲存實踐

安卓+七牛雲的第三方圖片儲存實踐


程式碼示例:

新增sdk依賴:




public class MainActivity extends AppCompatActivity {
    private ProgressDialog progressDlg;
    private Intent intent;

    private final int NONE=0,LOCAL_PICTURE=1,UPLOAD_TAKE_PICTURE=2,SAVE_THEME_IMAGE=3;
    private String takePictureUrl,upToken, imageFileName;

    ImageView photo;
    TextView select_local_picture;
    TextView download_picture;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        photo=(ImageView)findViewById(R.id.imageView);                     //上傳和下載的圖片位置
        select_local_picture=(TextView)findViewById(R.id.textView);        //上傳圖片的按鈕
        download_picture=(TextView)findViewById(R.id.textView2);

        //點選選擇本地圖片
        select_local_picture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        "image/*");
                startActivityForResult(intent,LOCAL_PICTURE);
            }
        });
        //點選下載圖片
        download_picture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HashMap map = new HashMap();
                map.put("請求型別", "請求下載圖片");
                requestFragment.httpRequest(map, CommonUrl.getPhoto);        //伺服器請求
            }
        });

    }

    //選擇圖片完成後
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==NONE)
            return;
        //耗時操作傳到handler裡去處理
        if(resultCode== Activity.RESULT_OK){
            this.intent=data;
            handler.sendEmptyMessage(LOCAL_PICTURE);
        }
    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                case LOCAL_PICTURE:       
                    //處理本地選擇的圖片
                    Uri uri=intent.getData();
                    String photo_local_file_path="圖片地址";     //使用uri獲取圖片地址略
                    if (!(photo_local_file_path.toString().toLowerCase().endsWith("jpg")||photo_local_file_path.toString().toLowerCase().endsWith("png")
                            ||photo_local_file_path.toString().toLowerCase().endsWith("jpeg")||photo_local_file_path.toString().toLowerCase().endsWith("gif"))) {
                        Toast.makeText(MainActivity.this, "不支援此格式的上傳", Toast.LENGTH_LONG).show();
                        break;
                    }
                    //簡單壓縮圖片
                    Bitmap bitmap2=PhotoUtil.getInstance().trasformToZoomPhotoAndLessMemory(photo_local_file_path);
                    Drawable addPicture =new BitmapDrawable(getResources(), bitmap2);
                    takePictureUrl=photo_local_file_path;
                    photo.setImageDrawable(addPicture);
                {
                    //imageFileName為儲存在伺服器端的圖片名
                    imageFileName = "username" + "/" + takePictureUrl.hashCode() + new Random(System.nanoTime()).toString();
                    HashMap map = new HashMap();
                    map.put("請求型別", "請求獲得token");
                    map.put("image", imageFileName);
                    Log.d("選擇了本地照片", "正在請求伺服器端獲取token");
                    requestFragment.httpRequest(map,Url.getToken);
                }
                break;
                case UPLOAD_TAKE_PICTURE:  //獲取token之後
                {
                    //使用SDK傳輸到七牛雲
                    UploadManager uploadmgr = new UploadManager();
                    File data = new File(takePictureUrl);
                    String key = imageFileName;
                    String token = upToken;
                    progressDlg = ProgressDialog.show(MainActivity.this, "上傳圖片", "正在上傳圖片", true, true, new DialogInterface.OnCancelListener() {
                        @Override
                        public void onCancel(DialogInterface dialogInterface) {
                            //取消了上傳
                        }
                    });
                    progressDlg.setMax(101);
                    uploadmgr.put(data, key, token, new UpCompletionHandler() {
                        @Override
                        public void complete(String key, ResponseInfo info, JSONObject response) {
                            //完成,發信息給業務伺服器
                            Log.d("to第三方結果",response.toString());
                            new Thread() {
                                public void run() {
                                    Map<String, Object> map = new HashMap<>();
                                    Message msg = handler.obtainMessage();
                                    msg.obj = map;
                                    msg.what = SAVE_THEME_IMAGE;
                                    handler.sendMessage(msg);//要上傳的圖片包裝在msg後變成了訊息發到handler
                                }
                            }.start();
                        }
                    }, new UploadOptions(null, null, false,
                            new UpProgressHandler() {
                                public void progress(String key, double percent) {
                                    //mProgress.setProgress((int)percent*100);
                                    progressDlg.setProgress((int) percent * 100);
                                }
                            }, null));
                }
                break;
                case SAVE_THEME_IMAGE: //傳到第三方之後告知伺服器
                    progressDlg.dismiss();
                {
                    HashMap map = new HashMap();
                    map.put("請求型別","上傳到七牛");
                    map.put("image",imageFileName);
                    requestFragment.httpRequest(map, "完成傳輸");     //在伺服器儲存圖片(只儲存圖片名)
                }
                progressDlg=ProgressDialog.show(MainActivity.this, "上傳圖片", "正在儲存圖片", true, true, new DialogInterface.OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface dialogInterface) {
                        //上傳完圖片後取消了儲存
                    }
                });
                break;
                default: //使用者身份認證失敗
                {

                    break;
                }
            }
        }
    };


    //伺服器端的響應
    public void requestFinish(String result, String requestUrl) throws JSONException {
        Message message = new Message();

        //獲取token
        if(requestUrl.equals(("獲取口令"))){
            JSONObject jsonObject=new JSONObject(result);
            int code = Integer.valueOf(jsonObject.getString("code"));
            if (code == 1) {
                JSONArray token = jsonObject.getJSONArray("contents");
                upToken = token.getString(0);//成功獲取口令
                handler.sendEmptyMessage(UPLOAD_TAKE_PICTURE);
                return;
            }
            else{
                Toast.makeText(MainActivity.this, "獲取口令失敗", Toast.LENGTH_LONG).show();
            }
        }
        if (requestUrl.equals("下載圖片")) {
            JSONObject object = new JSONObject(result);
            int code = Integer.valueOf(object.getString("code"));
            if (code == 1) {
               String url = "從伺服器獲得圖片的url地址";
                //使用picasso等圖片處理庫獲取圖片
                return;
            } else {
                //  Toast.makeText(profileActivity.this, "未知錯誤", Toast.LENGTH_LONG).show();
                return;
            }
        }
    }
}
備註:本文只討論客戶端相關操作,不涉及伺服器端的實現
       

相關推薦

+第三方圖片儲存實踐

程式碼示例: 新增sdk依賴: public class MainActivity extends AppCompatActivity { private ProgressDialog progressDlg; private Intent intent; private

【微信小程式】在微信開發工具上圖片可以看到,但是在真機上看不到的原因解決

在開發微信小程式過程中,在微信開發者工具上,七牛雲的圖片都可以展示出來,但是在真機上,七牛雲的圖片卻展示不出來,也沒有報404找不到或者不能載入圖片的問題,     必須保證: 1.圖片是用image載入的; 2.圖片的url裡面沒有中文; 3.圖片的HTTP應為小寫的

使用github做一個類似的雲端儲存

一、吐槽 首先我想說一句“日了狗”了不知道過分不過分! 前段時間,七牛雲發來下面的通知: 這意味著,我之前所有的使用七牛雲的圖片域名變了,要修改!要全部修改!!!算了,不說了。 消消氣,接下來說怎麼

JAVA圖片上傳

七牛雲上傳簡單應用,java版 記得匯入七牛雲的SDK AccountMgr.java------儲存AK  and SK /** * 七牛雲AK 和SK * 賬戶資訊,獲取授權認證 */

遷移圖片到github

遷移理由 問題是網站的大部分圖床都是用的七牛雲,官網有改動,所以原測試域名都失效,所以決定進行遷移,將七牛雲中的圖片遷移到github倉庫中。 遷移步驟 Step1:從廢棄測試域名空間至可用測試域名空間遷移。 Step2:從測試域名的空間下載至本機。 Step3:用git的方式,從本機上傳

ThinkPHP3.2整合第三方sdk

ThinkPHP3.2整合七牛雲最新第三方sdk,版本Release v7.1.3感覺ThinkPHP對第三方的sdk的支援不是特別友好,這次使用七牛雲sdk時就是這個問題,雖然ThinkPHP有自帶的七牛上傳驅動,但是肯定不如七牛自己更新的sdk好,畢竟是很久之前的版本了

免費物件儲存使用圖文教程

七牛雲是目前在行業物件儲存裡比較有良心的產品,我部落格目前的圖片均在七牛雲端儲存、呼叫,雖然伺服器硬碟足夠,但時間常了也會對伺服器是一種負擔,因此,本人選用七牛雲進行部落格圖片的儲存。下面就將我應用七牛雲的經驗分享給大家。一、註冊七牛雲七牛雲是通過郵箱註冊的,註冊後就進行認證

上傳圖片,視訊等檔案到物件儲存

上傳圖片: 需要用到的引數: 1、AccessKey (在“個人中心”–>“祕鑰管理”中) 2、SecretKey (在“個人中心”–>“祕鑰管理”中) 3、儲存空間名字(自己建立的) 1、建立一個Maven專案 pom.xml &l

springboot實現儲存檔案(圖片)到

1、建立QiniuConstant.java package com.zhonghao.pinfang.core.util.qiniu; import org.springframework.boot.context.properties.ConfigurationProperties; i

hexo入門學習(六):文章圖片儲存

詳情請檢視個人部落格文章圖片儲存到七牛雲   轉載請註明出處!   前幾天開啟blog發現使用前文中的方法原方法 文章中的圖片莫名奇妙的掛了。查閱資料(百度、谷歌)。發現七牛雲端儲存可以很好的解決這個問題。於是根據下面這篇文章基本解決了問題。 參考文

如何利用線上儲存圖片

平時寫學習筆記和部落格文章的時候早已習慣了使用 Markdown 記錄,各種方便,但圖片的儲存和展示成了一個比較關鍵的問題,雖然可以使用本地相對路徑顯示圖片,但也很不方便,總不能一直是單機版吧。七牛雲是國內一個不錯的線上儲存平臺,客戶眾多,你不用擔心哪天公司突然

在ThinkPHP5框架下引入Ueditor並實現向物件儲存上傳圖片同時將圖片資訊儲存到MySQL資料庫,同時實現lazyload懶載入

這是我花了很多天的時間才得以真正實現的一組需求。 文章後面有完整Demo的GitHub連結。 一、 需求描述 1. 應用是基於ThinkPHP5開發的; 2. 伺服器環境是LNMP,PHP版本是7.2,資料庫是MySQL5.6; 3. 由使用者(包括管理員)上傳的圖片一類的媒體檔案不能直接上傳到應用

Ueditor結合存儲上傳圖片、附件和圖片在線管理的實現和最新更新

1.4 star json serve 列出文件 教程 開發 存儲服務器 name 最新下載地址: https://github.com/widuu/qiniu_ueditor_1.4.3 Ueditor七牛雲存儲版本 註意事項 老版本請查看 : https://gith

yii2 ueditor-百度編輯器圖片上傳

inf https jpg 文件 詳細 hand widget yii 找到 1、編輯器使用的是褲衩哥的小部件,沒有安裝的使用composer安裝 php composer.phar require kucha/ueditor "*" 附上github的地址:http

馮立元:邊緣儲存的演進之路

2018 年 10 月 18 日-20 日,由極客邦科技與 InfoQ 中國主辦的 QCon 全球軟體開發大會在上海寶華萬豪酒店舉行。作為一場綜合性的技術盛會,QCon 全球軟體開發大會每年都會在倫敦、北京、東京、紐約、聖保羅、上海、舊金山召開,而此次 QCon 大會上海站更是設定了 30 餘個專題,邀

laravel 新增 儲存驅動

接著上2篇筆記: 使用 qshell 將本地檔案同步到七牛雲 https://blog.csdn.net/beyond__devil/article/details/83030702 將 laravel 專案內靜態檔案,css、js、images 部署到七牛雲 csdn https:/

共建公安標準體系 | 與銳科技達成深度戰略合作

2018 年 10 月 12 日,七牛雲與北京銳安科技有限公司簽署戰略合作協議。銳安科技總經理謝永恆、副總經理帥佩章,七牛雲總裁呂桂華、七牛雲人工智慧實驗室負責人彭垚、市場副總裁錢驥華出席簽約儀式。 七牛雲與銳安科技將在警務安防、網路資訊保安、大資料服務等重要領域達成全面長期戰略合作。通過深度

】通過富文字summernote,上傳圖片

在這邊我只對summernote富文字加以說明 1、首先是在index.html引入對應js和css <link rel="stylesheet" href="dist/static/summernote/summernote.css"> <script s

elementui 上傳圖片上面去,可以多張上傳 【簡單/有效】

目的:elementui 上傳多張圖片到七牛雲上面去  第一步:效果說明 七牛雲顯示: 第二步:程式碼 2-1、這裡會用到兩個小東西,一個是 後臺獲取 token,一個是獲取一個隨機不重複字串(uuid用來做上傳檔案的名稱) token 獲取:https

測試域名到期博客圖片問題

刪除列 方法 har 方便 管理 註釋 效果 http line 從上周末開始到今天,終於把七牛雲到期的測試域名所屬空間的博客照片遷移到騰訊雲。騰訊雲有一定量免費空間供用戶使用(發博文時免費額度:50 GB 標準存儲容量,10 GB CDN 回源流量,100 萬次讀請求,1