日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android端使用阿里OSS上传

發布時間:2024/3/26 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android端使用阿里OSS上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:https://www.jianshu.com/p/6a5b47ca2b37

https://help.aliyun.com/document_detail/93939.html?spm=a2c4g.11186623.6.1089.68e6a31fHzzILj

這節課,說一下阿里的OSS,可能會有一點坑。 還有我自己封裝的一個比較low的工具類。

我們選擇了將文件直接上傳到OSS,然后拿到文件的url,將url交給服務器保存。這樣一來就大大減少了服務器的壓力。

直接上自己封裝的工具類代碼吧。(直接拿去就可以用)

1.配置依賴:

compile'com.aliyun.[dpa:oss-android-sdk:+](http://dpaoss-android-sdk+/)'//這里用sdk+ 是為了隨時跟隨oss的版本更新,oss也會隨時修復bug。compile'com.squareup.[okhttp3:okhttp:3.4.1](http://okhttp3okhttp:3.4.1/)'//

由于OSS底層封裝是ok,所以ok的依賴也得有

compile'com.squareup.[okio:okio:1.9.0](http://okiookio:1.9.0/)'

2.********這里權限就不貼代碼了,什么網絡權限,文件讀取權限記得不要少。***********

3.然后是混淆(很重要)

-keep class com.alibaba.sdk.android.oss.** { *; }-dontwarn okio.**-dontwarn org.apache.commons.codec.binary.**

4.然后就是代碼了

/*** Created by yangjinyang on 2018/4/19.* 姓名:楊阿陽阿陽* 類說明:Oss上傳工具類*/public class MyOSSUtils {private static MyOSSUtilsinstance;private final StringP_ENDPOINT ="http://oss-cn-beijing.aliyuncs.com";//主機地址(OSS文檔中有提到)private final StringP_STSSERVER = UrlHelper.BASE_URL +"get_aliyun_oss_sts";(服務器域名)private final StringP_BUCKETNAME ="文件夾名字";(文件夾名字)private OSSoss;private SimpleDateFormatsimpleDateFormat;public MyOSSUtils() {}public static MyOSSUtils getInstance() {if (instance ==null) {if (instance ==null) {return new MyOSSUtils();}}return instance;}private void getOSs(Context context) {//推薦使用OSSAuthCredentialsProvider。token過期可以及時更新OSSCredentialProvider credentialProvider =new OSSAuthCredentialsProvider(P_STSSERVER);//該配置類如果不設置,會有默認配置,具體可看該類ClientConfiguration conf =new ClientConfiguration();conf.setConnectionTimeout(15 *1000);// 連接超時,默認15秒conf.setSocketTimeout(15 *1000);// socket超時,默認15秒conf.setMaxConcurrentRequest(5);// 最大并發請求數,默認5個conf.setMaxErrorRetry(2);// 失敗后最大重試次數,默認2次oss =new OSSClient(context,P_ENDPOINT, credentialProvider);if (simpleDateFormat==null){simpleDateFormat =new SimpleDateFormat("yyyyMMdd");}}/*** 上傳圖片 上傳文件** @param context application上下文對象* @param ossUpCallback 成功的回調* @param img_name 上傳到oss后的文件名稱,圖片要記得帶后綴 如:.jpg* @param imgPath 圖片的本地路徑*/public void upImage(Context context,final MyOSSUtils.OssUpCallback ossUpCallback,final String img_name, String imgPath) {getOSs(context);final Date data =new Date();data.setTime(System.currentTimeMillis());PutObjectRequest putObjectRequest =new PutObjectRequest(P_BUCKETNAME,simpleDateFormat.format(data)+"/"+ img_name, imgPath);putObjectRequest.setProgressCallback(new OSSProgressCallback() {@Overridepublic void onProgress(PutObjectRequest request,long currentSize,long totalSize) {ossUpCallback.inProgress(currentSize, totalSize);}});oss.asyncPutObject(putObjectRequest,new OSSCompletedCallback() {@Overridepublic void onSuccess(PutObjectRequest request, PutObjectResult result) {Log.e("MyOSSUtils","------getRequestId:" + result.getRequestId());// try {ossUpCallback.successImg(oss.presignPublicObjectURL(P_BUCKETNAME,simpleDateFormat.format(data)+"/"+img_name));// } catch (ClientException e) {// e.printStackTrace();// }}@Overridepublic void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {ossUpCallback.successImg(null);}});}/*** 上傳圖片 上傳流** @param context application上下文對象* @param ossUpCallback 成功的回調* @param img_name 上傳到oss后的文件名稱,圖片要記得帶后綴 如:.jpg* @param imgbyte 圖片的byte數組*/public void upImage(Context context,final MyOSSUtils.OssUpCallback ossUpCallback,final String img_name,byte[] imgbyte) {getOSs(context);final Date data =new Date();data.setTime(System.currentTimeMillis());PutObjectRequest putObjectRequest =new PutObjectRequest(P_BUCKETNAME,simpleDateFormat.format(data)+"/"+ img_name, imgbyte);putObjectRequest.setProgressCallback(new OSSProgressCallback() {@Overridepublic void onProgress(PutObjectRequest request,long currentSize,long totalSize) {ossUpCallback.inProgress(currentSize, totalSize);}});oss.asyncPutObject(putObjectRequest,new OSSCompletedCallback() {@Overridepublic void onSuccess(PutObjectRequest request, PutObjectResult result) {Log.e("MyOSSUtils","------getRequestId:" + result.getRequestId());ossUpCallback.successImg(oss.presignPublicObjectURL(P_BUCKETNAME,simpleDateFormat.format(data)+"/"+img_name));}@Overridepublic void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {ossUpCallback.successImg(null);}});}/*** 上傳視頻** @param context application上下文對象* @param ossUpCallback 成功的回調* @param video_name 上傳到oss后的文件名稱,視頻要記得帶后綴 如:.mp4* @param video_path 視頻的本地路徑*/public void upVideo(Context context,final MyOSSUtils.OssUpCallback ossUpCallback,final String video_name, String video_path) {getOSs(context);final Date data =new Date();data.setTime(System.currentTimeMillis());PutObjectRequest putObjectRequest =new PutObjectRequest(P_BUCKETNAME,simpleDateFormat.format(data)+"/"+ video_name, video_path);putObjectRequest.setProgressCallback(new OSSProgressCallback() {@Overridepublic void onProgress(PutObjectRequest request,long currentSize,long totalSize) {ossUpCallback.inProgress(currentSize, totalSize);}});oss.asyncPutObject(putObjectRequest,new OSSCompletedCallback() {@Overridepublic void onSuccess(PutObjectRequest request, PutObjectResult result) {ossUpCallback.successVideo(oss.presignPublicObjectURL(P_BUCKETNAME,simpleDateFormat.format(data)+"/"+video_name));}@Overridepublic void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {ossUpCallback.successVideo(null);}});}public interface OssUpCallback {void successImg(String img_url);void successVideo(String video_url);void inProgress(long progress,long zong);}}

現在你們看到的結果是完美的,可是不知它的過程有多么痛苦;接下來闡述幾個坑:

1、傳音視頻和圖片的時候,文件名稱結尾一定要加上.mp4、.jpg、.png等后綴,直接拿本地的路徑雖然有后綴,但是OSS那邊是另一套名字。

2、當服務端要求存到某一個文件夾中的時候,一定是"文件夾名字 / 文件名" 開始和結尾一定一定不要帶 "/"。

3、OSS官方沒有給出文件批量上傳的方法,OSS官方沒有給出文件批量上傳的方法,OSS官方沒有給出文件批量上傳的方法。重要的事情要說三遍。

4、OSS官方相關的安卓文檔貌似并沒有提到怎么拿到文件的url,但是工具類中已經有寫到了:

oss.presignPublicObjectURL(P_BUCKETNAME, simpleDateFormat.format(data)+"/"+ img_name);//BUCKETNAME名字和文件名字。一定要在異步上傳完成之后調用。

這里我沒有做一個eg,因為其實官網的文檔寫的還是不錯的,我覺得你要了解一個SDK一定要先看看API,然后才看工具類。這樣你會特別明了。



作者:楊阿陽阿陽
鏈接:https://www.jianshu.com/p/6a5b47ca2b37
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

總結

以上是生活随笔為你收集整理的Android端使用阿里OSS上传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人午夜视频在线 | 最新国产网站 | 成人无码精品1区2区3区免费看 | 国产精品一区二区三区免费在线观看 | 成人免费久久 | 精品播放| 天天夜夜久久 | 九色tv| 亚洲操图 | 9999免费视频 | 国产精品久久久久久久久久久久久久久久久 | 特黄一级大片 | 啪啪免费av | 欧美性猛交99久久久久99按摩 | www.爱操 | 日韩午夜剧场 | 俺去俺来也在线www色官网 | 中文在线视频 | 少妇性l交大片7724com | 国产女主播在线一区二区 | 亚洲交性网 | 亚洲成人一区在线 | 国产免费一级 | 日本特黄一级片 | 国产日韩在线观看视频 | 草久久久久久 | 国产精品久久伊人 | 亚洲一区和二区 | 涩里番在线观看 | 天天摸日日摸 | 日本大奶视频 | 久久人人爽人人爽人人 | 色老头影视 | 少妇乱淫 | 理论片午夜 | 妖精视频污| 超碰午夜 | 国产精品女人精品久久久天天 | a级一级黄色片 | 天天激情 | 国产成人av免费观看 | 午夜一区二区三区在线 | av手机在线看 | 桃谷绘里香在线观看 | youjizz欧美 | www.色婷婷.com| 天堂在线免费观看 | 欧美日韩在线观看免费 | 欧美成人一区二区三区片免费 | 国产传媒欧美日韩 | 欧美成人精品 | 国产精品二区一区二区aⅴ污介绍 | 黄瓜视频91 | 国产av毛片 | 亚洲免费在线 | 欧美一级性视频 | 九九九热视频 | 18精品爽国产白嫩精品 | 亚洲日日干 | 深夜成人在线观看 | 成人免费在线观看网站 | 日韩有码一区 | 这里只有精品6 | 伊人天天操 | 色六月婷婷 | 久久精品99国产精品日本 | 欧美亚韩一区二区三区 | 国产精品久久久爽爽爽麻豆色哟哟 | 黄色.com| 久久精品在线播放 | 熟女人妇 成熟妇女系列视频 | 人人亚洲 | 杨幂一区二区三区免费看视频 | 亚洲视频一区二区三区在线观看 | 91香蕉视频在线看 | 成年人小视频在线观看 | 欧美三级网站 | 国产福利91| 青青视频免费在线观看 | 明星双性精跪趴灌满h | jzz国产| www.av色| www毛片com | 亚洲精品一卡二卡 | 97精品国产97久久久久久粉红 | 国产h在线观看 | 欧美日韩国产激情 | 狼人香蕉 | 国产成人无码一区二区三区在线 | 中文字幕有码在线观看 | 激情久久久久 | 日批视频 | 久久午夜国产 | 色一情一交一乱一区二区三区 | 天堂av中文在线观看 | 在线观看三区 | 国产一级片 | 国产免费观看视频 | 欧美性一区 |