关于上传我们可以分三步进行。
第一步 就是通过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项目地址在里欢迎订阅