Android 拍照 以及从本地选择图片 上传
来源:互联网 发布:类似于上瘾的网络剧 编辑:程序博客网 时间:2024/05/17 04:15
activity代码
[java] view plain copy print?
- package com.ytint.wloaa.activity;
- import java.io.BufferedOutputStream;
- import java.io.DataOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.UUID;
- import android.app.Activity;
- import android.content.ContentResolver;
- import android.content.Context;
- import android.content.Intent;
- import android.database.Cursor;
- import android.graphics.Bitmap;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.provider.MediaStore;
- import android.util.Log;
- import android.view.Gravity;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.inputmethod.InputMethodManager;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.Toast;
- import com.ab.activity.AbActivity;
- import com.ab.view.ioc.AbIocView;
- import com.ytint.wloaa.R;
- import com.ytint.wloaa.app.MyApplication;
- import com.ytint.wloaa.bean.URLs;
- /**
- * 本地上传和调用系统拍照
- * @author Administrator
- *
- */
- public class PhotoActivity extends AbActivity implements OnClickListener{
- private MyApplication application;
- String TAG = "PhotoActivity";
- private ImageView img;
- private EditText img_content;
- private Button nati;
- private Button pai;
- private Button submit;
- @AbIocView(id = R.id.photo_full)
- LinearLayout photo_full;
- private static String srcPath;
- private static final int TIME_OUT = 10*1000; //超时时间
- private static final String CHARSET = "utf-8"; //设置编码
- private String loginKey;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.aa);
- application = (MyApplication) this.getApplication();
- loginKey = application.getProperty("loginKey");
- initView();
- }
- private void initView() {
- img = (ImageView) findViewById(R.id.img);
- nati = (Button) findViewById(R.id.natives);
- pai = (Button) findViewById(R.id.pai);
- submit = (Button) findViewById(R.id.submit);
- img_content=(EditText)findViewById(R.id.img_content);
- nati.setOnClickListener(this);
- pai.setOnClickListener(this);
- submit.setOnClickListener(this);
- OnClickListener keyboard_hide = new OnClickListener() {
- @Override
- public void onClick(View v) {
- InputMethodManager imm = (InputMethodManager) PhotoActivity.this
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
- }
- };
- photo_full.setClickable(true);
- photo_full.setOnClickListener(keyboard_hide);
- }
- @Override
- public void onClick(View v) {
- switch(v.getId()){
- case R.id.natives:
- Intent local = new Intent();
- local.setType("image/*");
- local.setAction(Intent.ACTION_GET_CONTENT);
- startActivityForResult(local, 2);
- break;
- case R.id.pai:
- Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(it, 1);
- break;
- case R.id.submit:
- if (srcPath == null || srcPath=="") {
- showToast("文件不存在");
- }else{
- submitUploadFile();
- }
- break;
- }
- }
- /**
- * 拍照上传
- */
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == Activity.RESULT_OK) {
- switch(requestCode) {
- case 1:
- Bundle extras = data.getExtras();
- Bitmap b = (Bitmap) extras.get("data");
- img.setImageBitmap(b);
- String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
- String fileNmae = Environment.getExternalStorageDirectory().toString()+File.separator+"dong/image/"+name+".jpg";
- srcPath = fileNmae;
- System.out.println(srcPath+"----------保存路径1");
- File myCaptureFile =new File(fileNmae);
- try {
- if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
- if(!myCaptureFile.getParentFile().exists()){
- myCaptureFile.getParentFile().mkdirs();
- }
- BufferedOutputStream bos;
- bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
- b.compress(Bitmap.CompressFormat.JPEG, 80, bos);
- bos.flush();
- bos.close();
- }else{
- Toast toast= Toast.makeText(PhotoActivity.this, "保存失败,SD卡无效", Toast.LENGTH_SHORT);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- break;
- case 2:
- Uri uri = data.getData();
- img.setImageURI(uri);
- ContentResolver cr = this.getContentResolver();
- Cursor c = cr.query(uri, null, null, null, null);
- c.moveToFirst();
- //这是获取的图片保存在sdcard中的位置
- srcPath = c.getString(c.getColumnIndex("_data"));
- System.out.println(srcPath+"----------保存路径2");
- break;
- default:
- break;
- };
- }
- // n =1;
- }
- private void submitUploadFile(){
- final File file=new File(srcPath);
- final String RequestURL=URLs.UPLOADPHOTO;
- if (file == null || (!file.exists())) {
- return;
- }
- Log.i(TAG, "请求的URL=" + RequestURL);
- Log.i(TAG, "请求的fileName=" + file.getName());
- final Map<String, String> params = new HashMap<String, String>();
- params.put("user_id", loginKey);
- params.put("file_type", "1");
- params.put("content", img_content.getText().toString());
- showProgressDialog();
- new Thread(new Runnable() { //开启线程上传文件
- @Override
- public void run() {
- uploadFile(file, RequestURL,params);
- }
- }).start();
- }
- /**
- * android上传文件到服务器
- * @param file 需要上传的文件
- * @param RequestURL 请求的rul
- * @return 返回响应的内容
- */
- private String uploadFile(File file,String RequestURL,Map<String, String> param){
- String result = null;
- String BOUNDARY = UUID.randomUUID().toString(); //边界标识 随机生成
- String PREFIX = "--" , LINE_END = "\r\n";
- String CONTENT_TYPE = "multipart/form-data"; //内容类型
- // 显示进度框
- // showProgressDialog();
- try {
- URL url = new URL(RequestURL);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setReadTimeout(TIME_OUT);
- conn.setConnectTimeout(TIME_OUT);
- conn.setDoInput(true); //允许输入流
- conn.setDoOutput(true); //允许输出流
- conn.setUseCaches(false); //不允许使用缓存
- conn.setRequestMethod("POST"); //请求方式
- conn.setRequestProperty("Charset", CHARSET); //设置编码
- conn.setRequestProperty("connection", "keep-alive");
- conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
- if(file!=null){
- /**
- * 当文件不为空,把文件包装并且上传
- */
- DataOutputStream dos = new DataOutputStream( conn.getOutputStream());
- StringBuffer sb = new StringBuffer();
- String params = "";
- if (param != null && param.size() > 0) {
- Iterator<String> it = param.keySet().iterator();
- while (it.hasNext()) {
- sb = null;
- sb = new StringBuffer();
- String key = it.next();
- String value = param.get(key);
- sb.append(PREFIX).append(BOUNDARY).append(LINE_END);
- sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END);
- sb.append(value).append(LINE_END);
- params = sb.toString();
- Log.i(TAG, key+"="+params+"##");
- dos.write(params.getBytes());
- // dos.flush();
- }
- }
- sb = new StringBuffer();
- sb.append(PREFIX);
- sb.append(BOUNDARY);
- sb.append(LINE_END);
- /**
- * 这里重点注意:
- * name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
- * filename是文件的名字,包含后缀名的 比如:abc.png
- */
- sb.append("Content-Disposition: form-data; name=\"upfile\";filename=\""+file.getName()+"\""+LINE_END);
- sb.append("Content-Type: image/pjpeg; charset="+CHARSET+LINE_END);
- sb.append(LINE_END);
- dos.write(sb.toString().getBytes());
- InputStream is = new FileInputStream(file);
- byte[] bytes = new byte[1024];
- int len = 0;
- while((len=is.read(bytes))!=-1){
- dos.write(bytes, 0, len);
- }
- is.close();
- dos.write(LINE_END.getBytes());
- byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();
- dos.write(end_data);
- dos.flush();
- /**
- * 获取响应码 200=成功
- * 当响应成功,获取响应的流
- */
- int res = conn.getResponseCode();
- System.out.println("res========="+res);
- if(res==200){
- InputStream input = conn.getInputStream();
- StringBuffer sb1= new StringBuffer();
- int ss ;
- while((ss=input.read())!=-1){
- sb1.append((char)ss);
- }
- result = sb1.toString();
- // // 移除进度框
- // removeProgressDialog();
- finish();
- }
- else{
- }
- }
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return result;
- }
- }
xml代码
[html] view plain copy print?
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/photo_full"
- android:orientation="vertical" >
- <ImageView
- android:id="@+id/img"
- android:layout_width="fill_parent"
- android:layout_height="350dp"
- android:layout_weight="0.6" />
- <EditText
- android:id="@+id/img_content"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.1"
- android:ems="10"
- android:inputType="textMultiLine"
- android:lines="3" >
- </EditText>
- <Button
- android:id="@+id/natives"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.1"
- android:text="本地选择" />
- <Button
- android:id="@+id/pai"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.1"
- android:text="拍照上传" />
- <Button
- android:id="@+id/submit"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.1"
- android:text="确定" />
- </LinearLayout>
0 0
- Android 拍照 以及从本地选择图片 上传
- Android 拍照 以及从本地选择图片 上传
- android 从本地或者拍照上传图片
- Android实现拍照,以及从相册选择图片裁剪功能同时保存在本地
- Android拍照,选择本地图片
- Ionic3学习笔记(十二)拍照上传图片以及从相册选择图片上传
- Android上传本地图片或者拍照上传
- Android 图片拍照上传、本地上传
- android 客户端通过选择本地相册和拍照上传本地图片到服务器端
- android-显示选择本地图片或拍照
- android拍照和本地选择图片
- android 手机拍照选择本地图片
- android 选择图片以及拍照,保存图片
- 拍照上传图片与从相册中选择图片上传
- Android拍照或本地图片上传
- Android设置拍照或者上传本地图片
- Android本地上传图片、拍照、裁剪
- Android获取本地图片或拍照上传
- Exception_android_java.util.zip.ZipException: duplicate entry:android/support/multidex/MultiDex
- GifRocket - 超简单傻瓜式将视频截取转换制作成 GIF 动画图片的免费 Mac 软件
- 图像视觉领域部分开源代码2-2015
- 关于使用Glide的一点小坑
- Yarn最佳实践
- Android 拍照 以及从本地选择图片 上传
- Android 多种简单的弹出框样式设置
- SQL Case when 的使用方法
- 函数定义说明与函数类型
- Linux调度的实现
- centos7.2_java
- 通过bulid一个微服务学习docker
- 小程序一:小程序的框架
- Disruptor的开发应用