Android_本地上传照片文件

本地上传照片文件

 

一.知识点

       1.遍历SD卡中某一路径下指定类型的图片

       2.上传图片

二.代码解析
public class LocationPhoto extends Activity implements Runnable {

 

       private Bundle bundle;

       private Intent intent;

       private String type = null;

       private String dianya = null;

       private String name = null;

       Gallery g = null;

       Button but1 = null;// 选择按钮

       Button but2 = null;// 删除按钮

       Button but3 = null;// 上传按钮

       TextView text1 = null;// 命名Text

       EditText edit1 = null;// 命名Edit

       List<String> it = null;// 遍历符合条件的列表

       List<String> seList = new ArrayList<String>();// 已选择列表

       public String actionUrl = null;

       public String dqPhoto = null;

       public ProgressDialog myDialog=null;

 

       private final String SD_PATH = android.os.Environment

                     .getExternalStorageDirectory().getAbsolutePath();

 

       /** Called when the activity is first created. */

       @Override

       public void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.location_photo);

              intent = getIntent();

              bundle = intent.getExtras();

              int num = bundle.getInt("selectType");

              type = new TypeDianyaOptions().getSelectType(num);

              dianya = new TypeDianyaOptions().getSelectDianYa(num);

              g = (Gallery) findViewById(R.id.mygallery);

              but1 = (Button) findViewById(R.id.but1);

              but2 = (Button) findViewById(R.id.but2);

              but3 = (Button) findViewById(R.id.but3);

              text1 = (TextView) findViewById(R.id.newNameText);

              edit1 = (EditText) findViewById(R.id.nameEdit);

 

              g.setAdapter(new ImageAdapter(this, getSD()));

              g.setOnItemClickListener(new OnItemClickListener() {

                     public void onItemClick(AdapterView<?> parent, View v,

                                   int position, long id) {

                            dqPhoto = it.get(position);

                            Toast.makeText(LocationPhoto.this,

                                          "序列:" + (position + 1) + "\n路径:" + it.get(position),

                                          Toast.LENGTH_LONG).show();

                     }

              });

//选择功能

              but1.setOnClickListener(new OnClickListener() {

 

                     public void onClick(View v) {

                            if (dqPhoto == null) {

                                   Toast.makeText(LocationPhoto.this, "点击锁定图片",

                                                 Toast.LENGTH_LONG).show();

                            } else if (seList.contains(dqPhoto)) {

                                   dqPhoto = null;

                                   Toast.makeText(LocationPhoto.this, "图片已在选择列",

                                                 Toast.LENGTH_LONG).show();

                            } else {

                                   seList.add(dqPhoto);

                                   dqPhoto = null;

                                   Toast.makeText(LocationPhoto.this, "选择成功",

                                                 Toast.LENGTH_LONG).show();

                            }

                     }

              });

       //删除功能

              but2.setOnClickListener(new OnClickListener() {

 

                     public void onClick(View v) {

                            if (dqPhoto == null) {// 未选择图片时

                                   Toast.makeText(LocationPhoto.this, "点击锁定图片",

                                                 Toast.LENGTH_LONG).show();

                            } else if (!seList.contains(dqPhoto)) {

                                   dqPhoto = null;

                                   Toast.makeText(LocationPhoto.this, "图片不在选择列中",

                                                 Toast.LENGTH_LONG).show();

                            } else {

                                   if (seList.remove(dqPhoto)) {

                                          dqPhoto = null;

                                          Toast.makeText(LocationPhoto.this, "图片已从选择列中删除",

                                                        Toast.LENGTH_LONG).show();

                                   } else {// 从选择列中删除失败

                                          dqPhoto = null;

                                          Toast.makeText(LocationPhoto.this, "图片删除失败",

                                                        Toast.LENGTH_LONG).show();

                                           Toast.makeText(LocationPhoto.this,

                                           "选择的数目:" + seList.size(), Toast.LENGTH_LONG)

                                           .show();

                                   }

                            }

                     }

              });

       //上传功能

              but3.setOnClickListener(new OnClickListener() {

 

                     public void onClick(View v) {

                            name = edit1.getText().toString();

                            actionUrl = "http://124.128.199.98:8090/JNDLS/uploadImage?type="

                                          + type + "&dianya=" + dianya + "&name=" + name;

                            if (seList != null && seList.size() > 0) {

                                   if (name != null && name.length() > 0) {

                                          myDialog=ProgressDialog.show(LocationPhoto.this, "请稍等", "正在执行上传请求中...");

                                          Thread thread=new Thread(LocationPhoto.this);

                                          thread.start();

                                         

                                   } else {

                                          Toast.makeText(LocationPhoto.this, "请填写杆号为图片命名!",

                                                        Toast.LENGTH_LONG).show();

                                   }

                            } else {

                                   Toast.makeText(LocationPhoto.this, "尚未选择上传图片!",

                                                 Toast.LENGTH_LONG).show();

                            }

                     }

              });

       }

 

//遍历SD卡中某一路径下指定类型的图片

       private List<String> getSD() {

              it = new ArrayList<String>();

              File f = new File(SD_PATH + "//" + "jndlzp");

              File[] files = f.listFiles();

 

              for (int i = 0; i < files.length; i++) {

                     File file = files[i];

                     if (getImageFile(file.getPath()))

                            it.add(file.getPath());

              }

              return it;

       }

 

//指定遍历文件类型

       private boolean getImageFile(String fName) {

              boolean re;

 

              String end = fName

                            .substring(fName.lastIndexOf(".") + 1, fName.length())

                            .toLowerCase();

 

              if (end.equals("jpg") || end.equals("gif") || end.equals("png")

                            || end.equals("jpeg") || end.equals("bmp")) {

                     re = true;

              } else {

                     re = false;

              }

              return re;

       }

 

       public class ImageAdapter extends BaseAdapter {

              int mGalleryItemBackground;

              private Context mContext;

              private List<String> lis;

 

              public ImageAdapter(Context c, List<String> li) {

                     mContext = c;

                     lis = li;

                     TypedArray a = obtainStyledAttributes(R.styleable.Gallery);

                     mGalleryItemBackground = a.getResourceId(

                                   R.styleable.Gallery_android_galleryItemBackground, 0);

                     a.recycle();

              }

 

              public int getCount() {

                     return lis.size();

              }

 

              public Object getItem(int position) {

                     return position;

              }

 

              public long getItemId(int position) {

                     return position;

              }

 

              public View getView(int position, View convertView, ViewGroup parent) {

                     ImageView i = new ImageView(mContext);

                     Bitmap bm = BitmapFactory.decodeFile(lis.get(position).toString());

                     i.setImageBitmap(bm);

                     i.setScaleType(ImageView.ScaleType.FIT_XY);

                     i.setLayoutParams(new Gallery.LayoutParams(188, 288));

                     i.setBackgroundResource(mGalleryItemBackground);

                     return i;

              }

       }

       public void run() {

              // TODO Auto-generated method stub

              try {

                     for (int i = 0; i < seList.size(); i++) {

                            uploadFile(actionUrl, seList.get(i));

                     }

                     handler.sendEmptyMessage(0);

                    

              } catch (Exception e) {

                     showDialog("上传失败!");

              }

             

       }

 

       //Handler构建之后,会坚挺传来的信息代码

       private Handler handler=new Handler(){

 

              @Override

              public void handleMessage(Message msg) {

                     // TODO Auto-generated method stub

                     myDialog.dismiss();

                     seList.clear();

                     showDialog("上传成功!");

              }

 

       };

     

  public void uploadFile(String actionUrl, String uploadFile) {

              String end = "\r\n";

              String twoHyphens = "--";

              String boundary = "*****";

              String nameStr = uploadFile.substring(uploadFile.lastIndexOf("/") + 1,

                            uploadFile.length());

              try {

                     URL url = new URL(actionUrl);

                     HttpURLConnection con = (HttpURLConnection) url.openConnection();

/* 允许InputOutput,不使用Cache */              

con.setDoInput(true);

                     con.setDoOutput(true);

                     con.setUseCaches(false);

                     /* 设定传送的method=POST */

                     con.setRequestMethod("POST");

                     /* setRequestProperty */

                     con.setRequestProperty("Connection", "Keep-Alive");

                     con.setRequestProperty("Charset", "UTF-8");

                     con.setRequestProperty("Content-Type",

                                   "multipart/form-data;boundary=" + boundary);

                     /* 设定DataOutputStream */       

                     DataOutputStream ds = new DataOutputStream(con.getOutputStream());

                     ds.writeBytes(twoHyphens + boundary + end);

                     ds.writeBytes("Content-Disposition: form-data; "

                                   + "name=\"file1\";filename=\"" + nameStr + "\"" + end);

                     ds.writeBytes(end);

/* 取得文件的FileInputStream */

                     FileInputStream fStream = new FileInputStream(uploadFile);

/* 设定每次写入1024bytes */

                     int bufferSize = 1024;

                     byte[] buffer = new byte[bufferSize];

 

                     int length = -1;

                     /* 从文件读取数据到缓冲区 */

                     while ((length = fStream.read(buffer)) != -1) {

                     /* 将数据写入DataOutputStream */

                            ds.write(buffer, 0, length);

                     }

                     ds.writeBytes(end);

                     ds.writeBytes(twoHyphens + boundary + twoHyphens + end);

 

                     /* close streams */

                     fStream.close();

                     ds.flush();

                     /* 取得Response内容 */

                     InputStream is = con.getInputStream();

                     int ch;

                     StringBuffer b = new StringBuffer();

                     while ((ch = is.read()) != -1) {

                            b.append((char) ch);

                     }

                     /* 关闭DataOutputStream */

                     ds.close();

              } catch (Exception e) {

              }

       }

       public void showDialog(String mess) {

              new AlertDialog.Builder(LocationPhoto.this).setTitle("Message")

                            .setMessage(mess).setNegativeButton("确定",

                                          new DialogInterface.OnClickListener() {

                                                 public void onClick(DialogInterface dialog,

                                                               int which) {

                                                 }

                                          }).show();

       }

}

你可能感兴趣的:(android)