1. 程式人生 > >關於雲服務Bmob的使用方法(下)——上傳檔案

關於雲服務Bmob的使用方法(下)——上傳檔案

上一篇我們說了如何傳輸資料,那麼這一篇我們進階一下,來談談如何傳輸檔案,比如圖片。

 關於如何在bmob上註冊和申請,上一篇已經有說明,不懂的讀者可以去看看,然後我們直接進入到專案中,首先我們還是老規矩,初始化bmob:

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Bmob.initialize(MainActivity.this, "267ef22e7f2a44fee01869204b25da3f");
		initView();
		initListener();
//		initData();
	}
這個初始化很容易,就不再贅述了,然後我們建一個新的bean類:
<span style="font-size:18px;">public class PersonBean extends BmobObject{
	
	private String Name;
	private String password;
	private BmobFile file;
	
	public PersonBean(String Name,String password,BmobFile file){
		this.Name = Name;
		this.password = password;
		this.file = file;
	}
	
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public BmobFile getFile() {
		return file;
	}
	public void setFile(BmobFile file) {
		this.file = file;
	}
}</span>

其中包含了新的屬性,bmobfile也就是bmob的sdk裡自己封裝的型別,是屬於檔案類,所以我們直接進行宣告,然後進行檔案的選擇和上傳:
<span style="font-size:18px;">uploadImage.setOnClickListener(new OnClickListener() {
			
			@SuppressWarnings("unused")
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				File file = new File("/mnt/sdcard/"+Path);
				if (file != null) {
					final BmobFile bmobFile = new BmobFile(file);
					final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
					progressDialog.setMessage("正在上傳。。。");
					progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
					progressDialog.show();
					bmobFile.upload(MainActivity.this, new UploadFileListener() {

						@Override
						public void onSuccess() {
							// TODO Auto-generated method stub
							url = bmobFile.getUrl();
							insertObject(new PersonBean("絕地反擊","123456",bmobFile));
							Toast.makeText(MainActivity.this, "上傳成功", Toast.LENGTH_SHORT).show();
							progressDialog.dismiss();
						}

						@Override
						public void onFailure(int arg0, String arg1) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this, "上傳失敗"+arg1, Toast.LENGTH_SHORT).show();						
						}

					});
				}else {
						Toast.makeText(MainActivity.this, "檔案為空", Toast.LENGTH_SHORT).show();
					}

				}
			
		});</span>
這是在上傳的按鈕中進行上傳事件的呼叫,至於選擇的檔案的方法,等下筆者會將所有原始碼給出,不用急。然後上傳成功後我們可以在後臺直接進行檢視,這樣:


左邊點選檔案服務,然後點選右邊的檔案管理就能夠看所有上傳的檔案,就像這樣:


這裡面是筆者測試的檔案,點選檔名稱就能看到檔案了。

說完了上傳檔案,我們來說一說下載檔案,下載檔案就是從平臺分配給檔案的url來進行下載和解析,直接看程式碼:

<span style="font-size:18px;">downloadBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				progressDialog = new ProgressDialog(MainActivity.this);
				progressDialog.setMessage("正在上傳。。。");
				progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
				progressDialog.show();
				new Thread(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						Looper.prepare();
						 try {
							 	Bitmap bitmap1=null;
				                URL myUrl;
				                url = "http://file.bmob.cn/" + url;
		                		Toast.makeText(MainActivity.this, url+"", Toast.LENGTH_SHORT).show();
		                        myUrl=new URL(url);
		                        HttpURLConnection conn=(HttpURLConnection)myUrl.openConnection();
		                        conn.setConnectTimeout(5000);
		                        conn.connect();
		                        InputStream is=conn.getInputStream();
		                        bitmap1=BitmapFactory.decodeStream(is);
		                        //把bitmap轉成圓形
		                        BitmapUtil bmuUtil = new BitmapUtil(MainActivity.this);
		                        mBitmap=bmuUtil.toRoundBitmap(bitmap1);
		                        is.close();
		                        Message msg = mhandler.obtainMessage(1, mBitmap);
		        				mhandler.sendMessage(msg);
		                } catch (MalformedURLException e) {
		                        // TODO Auto-generated catch block
		                        e.printStackTrace();
		                } catch (IOException e) {
		                        // TODO Auto-generated catch block
		                        e.printStackTrace();
		                }
						 Looper.loop();
					}
				}).start();
				
	        }
		});</span>
這個和上面的一樣,筆者也是在按鈕的點選事件中寫的,由於是demo,所以都是用匿名內部類,大家看方法就好,由於是耗時的網路操作,所以筆者用了執行緒進行介面的變換,關於執行緒的問題,筆者還有文章是關於這個方面的,大家有興趣可以去看看,然後成果是這樣:



原始碼的地址:http://pan.baidu.com/s/1hq4dseo 記得將APPID給換成自己申請的id。