android 客户端通过选择本地相册和拍照上传本地图片到服务器端

关于上传我们可以分三步进行。

第一步 就是通过Intent 获取本地相册的访问拿到本地图片的路径或者是通过相机拍摄图片保存本地
(1)这个是通过相机拍照然后保存本地
// 记录文件名
private String filename;

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(photoPath);
if (!file.exists()) { // 检查图片存放的文件夹是否存在
file.mkdir(); // 不存在的话 创建文件夹
}
filename = “dingdangkaUserImage” + System.currentTimeMillis() + “.jpg”;
// 下面这句指定调用相机拍照后的照片存储的路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), filename)));
startActivityForResult(intent, 1);
(2)这个是通过悬着本地图片获取图片的储存路径
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
“image/*”);
startActivityForResult(intent, 2);

第二步 就是通过Intent 返回图片的物理地址。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ContentResolver resolver = getContentResolver();
switch (requestCode) {
case 1:
int degree = readPictureDegree(Environment
.getExternalStorageDirectory().getPath() + “/” + filename);
BitmapFactory.Options opts=new BitmapFactory.Options();//获取缩略图显示到屏幕上
opts.inSampleSize=2;

        Bitmap bitmap = BitmapFactory.decodeFile(Environment
                .getExternalStorageDirectory().getPath() + "/" + filename,opts);
        if(null == bitmap)
            break;
        Bitmap newbitmap = rotaingImageView(degree, bitmap); 

        float wight = newbitmap.getWidth();
        float height = newbitmap.getHeight();
        ZoomBitmap.zoomImage(newbitmap, wight / 8, height / 8);

        image.setImageBitmap(ZoomBitmap.zoomImage(newbitmap, wight / 8,
                height / 8));
        upbitmap = ZoomBitmap.zoomImage(newbitmap, wight / 8, height / 8);

        break;
    case 2:
        if (data !=null  && data.getData() != null) {   
        // 获得图片的uri
          Uri originalUri = data.getData();
          // 将图片内容解析成字节数组
          try {
                mContent = readStream(resolver.openInputStream(Uri
                                .parse(originalUri.toString())));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          // 将字节数组转换为ImageView可调用的Bitmap对象
            upbitmap = getPicFromBytes(mContent, null);
            upbitmap=ZoomBitmap.zoomImage(upbitmap, upbitmap.getWidth()/8, upbitmap.getHeight()/8);
            image.setImageBitmap(upbitmap);
            upbitmap=BitmapFactory.decodeFile(getAbsoluteImagePath(data.getData()));
            //剪一下,防止测试的时候上传的文件太大
            upbitmap=ZoomBitmap.zoomImage(upbitmap, upbitmap.getWidth()/8, upbitmap.getHeight()/8);
        }
        break;
    default:
        break;
    }
}

第三步 获取到物理地址后转换成Bitmap 对象 , 将图片流以字符串形式存储下来通过Http 上传文件到服务器端。
这里我是有写的一个方法的。

// 图片上传
public void upLoad() {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
if(null == upbitmap){
//showToast(“请选择图片或拍照!”);
return;
}
upbitmap.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] b = stream.toByteArray();
// 将图片流以字符串形式存储下来
String file = new String(Base64Coder.encodeLines(b));
String key= new String(shopno);
HttpClient client = new DefaultHttpClient();
// 设置上传参数
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair(“file”, file));
formparams.add(new BasicNameValuePair(“key”, key));

    HttpPost post = new HttpPost(HOST);
    UrlEncodedFormEntity entity;
    try {

        entity = new UrlEncodedFormEntity(formparams, "UTF-8");
        post.addHeader("Accept","text/javascript, text/html, application/xml, text/xml");
        post.addHeader("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");
        post.addHeader("Accept-Encoding", "gzip,deflate,sdch");
        post.addHeader("Connection", "Keep-Alive");
        post.addHeader("Cache-Control", "no-cache");
        post.addHeader("Content-Type", "application/x-www-form-urlencoded");
        post.setEntity(entity);
        HttpResponse response = client.execute(post);
        HttpEntity e = response.getEntity();
        if (200 == response.getStatusLine().getStatusCode()) {
            //showToast("上传成功!!!");
            Intent intent=new Intent();
            intent.setClass(ImageUp.this, gerenshizhi.class);
            startActivity(intent);
            finish();
        } else {
            showToast("上传失败!!!");
            Toast.makeText(ImageUp.this,"上传失败!",Toast.LENGTH_LONG).show();
        }
        client.getConnectionManager().shutdown();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
好了以上就是我用到的图片上传到服务器端的全部过程,如有纰漏望大牛指点。有不懂的也可以和我留言相互交流学习。

最后祝大家程序之路越走越长!与君共勉~!

有不明白的欢迎留言!

我们一起共同进步!表示谢谢!如果有技术问题欢迎

加入我的QQ群 285526158.

喜欢的可以关注微信公众号,哪里每天都会推荐一篇开源项目Git项目地址在里欢迎订阅

这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值