关于云服务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。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值