微軟的Azure是一套很強大的雲端平台
Azure提供非常非常多的服務
我們最常使用的包括Web站台、SQL Database、儲存體等等
優點是支援各種語言(Java , Node.js , ASP , php ....等等)好處很多,而且收費便宜
想要使用Azure請先自行去微軟申請,這邊就不多加介紹如何申請了(首次使用免費一個月)
這篇是介紹如何使用Android 操作 Azure儲存體
1.建立Azure儲存體服務
進入你的Azure訂用帳戶,新增儲存體的服務
新增 -> 資料服務 -> 儲存體 -> 快速建立
填寫想要的URL 與 離你最近的位置 與 備份選項
按下建立後,要等一小段時間,好了之後可以看到畫面是這樣子
點選剛剛建立的儲存體進入管理畫面
按下容器 -> 建立容器
填寫名稱 與 存取權限(這邊因為要給Android存取,所以選公用)
好了之後回到儀表板,點選下面的管理存取金鑰
我們要記下2個東東,儲存體帳戶名稱 與 金鑰 (可以先隨便開個記事本把他們複製貼上)
2.回到Android
在gradle內Add Azure Lib
compile 'com.microsoft.azure.android:azure-storage-android:0.5.1'
3.在專案內建立一個AsyncTask
這是用來上傳檔案的Task
CONTAINER_NAME 是你剛剛自己取的
storageConnectionString 要依照格式
AccountName=剛剛複製下來的儲存體帳戶名稱
AccountKey=剛剛複製下來的金鑰
public class FileUploadTask extends AsyncTask{ //容器名稱 private static final String CONTAINER_NAME = "my-file"; //連結字串 private static final String storageConnectionString = "DefaultEndpointsProtocol=http;" + "AccountName=my01test01;" + "AccountKey=tTP+zfmrUGb6FhiPBW/fRNCrjnfwX1QkJIvLpMp0BpWvFhgGjhlq6Syn5DFGgMjTsvPwhC8GmB6db/jklDpzPw=="; private ProgressDialog mDialog; private File mUploadFile; private Context mContext; public FileUploadTask(Context context,File uploadFile) { mContext = context; mUploadFile = uploadFile; } @Override protected void onPreExecute() { mDialog = new ProgressDialog(mContext); mDialog.setTitle("Tips"); mDialog.setMessage("Uploading..."); mDialog.setCancelable(false); mDialog.show(); super.onPreExecute(); } @Override protected Boolean doInBackground(Void... params) { boolean status; try { CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); CloudBlobClient blobClient = storageAccount.createCloudBlobClient(); CloudBlobContainer container = blobClient.getContainerReference(CONTAINER_NAME); container.createIfNotExists(); String blobName = System.currentTimeMillis()+".txt"; CloudBlockBlob blockBlob = container.getBlockBlobReference(blobName); blockBlob.upload(new FileInputStream(mUploadFile), mUploadFile.length()); status = true; } catch (Exception e) { status = false; } return status; } @Override protected void onPostExecute(Boolean status) { if (status == true) { Toast.makeText(mContext,"檔案上傳成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(mContext,"檔案上傳失敗", Toast.LENGTH_SHORT).show(); } mDialog.cancel(); super.onPostExecute(status); } }
4.主畫面與測試
在Activity裡面就一個Button,layout就不貼了 按下後產生一個檔案並上傳
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { //在Cache內產生檔案 String fileContent = "現在時間="+System.currentTimeMillis(); File saveFile = new File(MainActivity.this.getCacheDir(),"Test.txt"); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(fileContent.getBytes()); outStream.close(); //上傳 FileUploadTask fileUploadTask = new FileUploadTask(MainActivity.this,saveFile); fileUploadTask.execute(); }catch (Exception e){ e.printStackTrace(); } } }); } }
5.完成了!來看效果吧
按下按鈕後,跳出Dialog,結束後顯示Toast提示
回到Azure管理平台看看,果然上傳一個檔案了
將檔案下載下來,裡面的內容無誤