Bomb后端云实现本地图片上传服务器教训
好吧,越来越对自己的编程水平感到绝望。这两天入手Bmob,感觉很不错,昨天按照Bmob官网文档,很快入门,实现了在移动客户端添加Person表,mAddress和mName字段,并添加数据到服务器,整个都很流畅。
今天中午,想着在Person表增加一个字段mPic,实现从本地图片上传到服务器的功能,按照文档,我是想实现单个文件资源上传,文档大概提供了两种方式,三种手段,但它其中一种方法好像是过时了,并没有找到insertObject(),如下所示的方式应该是无法使用。
1 final BmobFile bmobFile = new BmobFile(file); 2 bmobFile.uploadblock(this, new UploadFileListener() { 3 4 @Override 5 public void onSuccess() { 6 // TODO Auto-generated method stub 7 Log.i(TAG, "电影文件上传成功,返回的名称--"+bmobFile.getFileUrl(MainActivity.this)); 8 insertObject(new Movie("冰封:重生之门",bmobFile)); 9 }
下面,着三种方式,都可以正常运行,但有个坑,一个用了我一个下午一个晚上的巨坑,那就是,要注意权限,也就是,手机要给它存贮的权限
1 bmobFile.uploadblock(new UploadFileListener() { 2 @Override 3 public void done(BmobException e) { 4 Person person = new Person(); 5 person.setmAddress("yongsheng"); 6 person.setmName("gz"); 7 person.setmPic(bmobFile); 8 person.save(new SaveListener<String>() { 9 @Override 10 public void done(String s, BmobException e) { 11 Toast.makeText(MainActivity.this, "Successful", Toast.LENGTH_LONG).show(); 12 } 13 }); 14 15 } 16 });
1 bmobFile.upload(new UploadFileListener() { 2 @Override 3 public void done(BmobException e) { 4 Person person = new Person(); 5 person.setmAddress("yongsheng"); 6 person.setmName("gz"); 7 person.setmPic(bmobFile); 8 person.save(new SaveListener<String>() { 9 @Override 10 public void done(String s, BmobException e) { 11 Toast.makeText(MainActivity.this, "Successful", Toast.LENGTH_LONG).show(); 12 } 13 }); 14 15 } 16 });
1 BmobFile.uploadBatch((String[]) listImg.toArray(new String[listImg.size()]), new UploadBatchListener() { 2 @Override 3 public void onSuccess(List<BmobFile> list, List<String> list1) { 4 if (list1.size() == listImg.size()) { // 如果数量相等,则代表文件全部上传完成 5 Person person = new Person(); 6 person.setmAddress("俊明"); 7 person.setmName("gz"); 8 person.setmPic(list.get(0)); 9 person.save(new SaveListener<String>() { 10 @Override 11 public void done(String s, BmobException e) { 12 Toast.makeText(MainActivity.this, "Successful", Toast.LENGTH_LONG).show(); 13 } 14 });}} 15 @Override 16 public void onProgress(int i, int i1, int i2, int i3) { 17 } 18 @Override 19 public void onError(int i, String s) { 20 Toast.makeText(MainActivity.this, "Failure" + s, Toast.LENGTH_LONG).show(); 21 }});
基本就是这样,弄清楚就觉得很简单,一直有问题,然后自己又找不到根源所在就很恼火。