这是主函数packagecom.zmb.updemo;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.UUID;importorg.apache.http.HttpResponse;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.ContentResolver;importandroid.content.Intent;importandroid.database.Cursor;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.net.Uri;importandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.provider.MediaStore;importandroid.util.Log;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ImageView;importandroid.widget.ProgressBar;importandroid.widget.TextView;publicclassMainActivityextendsActivityimplementsOnClickListener{privateButtonmBtnUpload,whether;privateProgressBarmPgBar;privateTextViewmTvProgress;privateButtonchoose;privateImageViewimageView;privateFilefile;privateUpLoadTaskupLoadTask;privatestaticfinalintTIME_OUT=120*10000000;//超时时间privatestaticfinalStringCHARSET="utf-8";//设置编码privatestaticfinalStringRequestURL="http://192.168.0.164:9580/ekp/TestServlet";privateAlertDialogdialog;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBtnUpload=(Button)findViewById(R.id.uploadImage);choose=(Button)findViewById(R.id.selectImage);imageView=(ImageView)findViewById(R.id.imageView);mBtnUpload.setOnClickListener(this);choose.setOnClickListener(this);ViewupView=getLayoutInflater().inflate(R.layout.progress_bar_item,null);mPgBar=(ProgressBar)upView.findViewById(R.id.pb_filebrowser_uploading);mTvProgress=(TextView)upView.findViewById(R.id.tv_filebrowser_uploading);whether=(Button)upView.findViewById(R.id.upload_over);whether.setOnClickListener(this);dialog=newAlertDialog.Builder(MainActivity.this).setView(upView).create();}privateclassUpLoadTaskextendsAsyncTask<Void,Integer,String>{@OverrideprotectedvoidonPostExecute(Stringresult){mTvProgress.setText(result);whether.setText("确定");}@OverrideprotectedvoidonPreExecute(){dialog.show();mTvProgress.setText("正在上传图片...");whether.setText("取消");}@OverrideprotectedvoidonProgressUpdate(Integer...values){Integernum=values[0];mPgBar.setProgress(num);mTvProgress.setText("正在上传图片..."+num+"%");}@OverrideprotectedStringdoInBackground(Void...parem){StringBOUNDARY=UUID.randomUUID().toString();//边界标识随机生成StringPREFIX="--",LINE_END="\r\n";StringCONTENT_TYPE="multipart/form-data";//内容类型try{URLurl=newURL(RequestURL);HttpURLConnectionconn=(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){/***当文件不为空,把文件包装并且上传*/OutputStreamoutputSteam=conn.getOutputStream();DataOutputStreamdos=newDataOutputStream(outputSteam);StringBuffersb=newStringBuffer();sb.append(PREFIX);sb.append(BOUNDARY);sb.append(LINE_END);/***这里重点注意:*name里面的值为服务器端需要key只有这个key才可以得到对应的文件*filename是文件的名字,包含后缀名的比如:abc.png*/sb.append("Content-Disposition:form-data;name=\"img\";filename=\""+file.getName()+"\""+LINE_END);sb.append("Content-Type:application/octet-stream;charset="+CHARSET+LINE_END);sb.append(LINE_END);dos.write(sb.toString().getBytes());InputStreamfis=newFileInputStream(file);longtotal=fis.available();Stringtotalstr=String.valueOf(total);Log.d("文件大小",totalstr);byte[]buffer=newbyte[8192];//8kintcount=0;intlength=0;while((count=fis.read(buffer))!=-1){dos.write(buffer,0,count);length+=count;publishProgress((int)((length/(float)total)*100));//为了演示进度,休眠50毫秒Thread.sleep(50);}fis.close();dos.write(LINE_END.getBytes());byte[]end_data=(PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();dos.write(end_data);dos.flush();/***获取响应码200=成功*当响应成功,获取响应的流*/intres=conn.getResponseCode();if(res==200){return"上传成功!";}}}catch(MalformedURLExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();}return"上传失败!";}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.main,menu);returntrue;}@OverridepublicvoidonClick(Viewv){intid=v.getId();switch(id){caseR.id.selectImage:/****这个是调用android内置的intent,来过滤图片文件,同时也可以过滤其他的*/Intentintent=newIntent();intent.setType("image/*");intent.setAction(Intent.ACTION_GET_CONTENT);//回调图片类使用的startActivityForResult(intent,RESULT_CANCELED);break;caseR.id.upload_over:if("确定".equals(whether.getText()+"")){dialog.dismiss();}else{upLoadTask.cancel(true);dialog.dismiss();}break;default:/*//这里的view是上传进度的弹框//AsyncTask的实例upLoadTask=newUpLoadTask();upLoadTask.execute();*/HttpClientclient=newDefaultHttpClient();HttpGetget=newHttpGet("http://192.168.0.164:9580/ekp/TestServlet");try{HttpResponseresponse=client.execute(get);BufferedReaderreader=newBufferedReader(newInputStreamReader(response.getEntity().getContent()));for(Strings=reader.readLine();s!=null;s=reader.readLine()){System.out.println("------------------??????");}}catch(Exceptione){e.printStackTrace();}break;}}/***回调执行的方法*/@SuppressWarnings("deprecation")@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){if(resultCode==Activity.RESULT_OK){/***当选择的图片不为空的话,在获取到图片的途径*/Uriuri=data.getData();try{String[]pojo={MediaStore.Images.Media.DATA};Cursorcursor=managedQuery(uri,pojo,null,null,null);if(cursor!=null){ContentResolvercr=this.getContentResolver();intcolunm_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();Stringpath=cursor.getString(colunm_index);/****这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,这样的话,我们判断文件的后缀名*如果是图片格式的话,那么才可以*/if(path.endsWith("jpg")||path.endsWith("png")){file=newFile(path);Bitmapbitmap=BitmapFactory.decodeStream(cr.openInputStream(uri));imageView.setImageBitmap(bitmap);}}}catch(Exceptione){e.printStackTrace();}}/***回调使用*/super.onActivityResult(requestCode,resultCode,data);}}

主配置文件

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="选择图片"android:id="@+id/selectImage"/><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="上传图片"android:id="@+id/uploadImage"/><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/imageView"/></LinearLayout>

还有一个进度条的配置文件

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"><ProgressBarandroid:id="@+id/pb_filebrowser_uploading"style="?android:attr/progressBarStyleHorizontal"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/tv_filebrowser_uploading"android:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/upload_over"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

更多相关文章

  1. android图片下载工具类
  2. Android 自定义显示图片Dialog
  3. Android之给图片添加水印效果
  4. Android 图片手势缩放自定义View
  5. Android往SD卡上存储文件
  6. TextView 在xml文件中的解释
  7. android java 文件的读写

随机推荐

  1. 改变Android(安卓)对话框位置及边框
  2. Android(安卓)--- 图片的特效处理
  3. 内存管理Memory Management in Android
  4. Android代码实现APK文件的安装与卸载
  5. 2010.12.26——— android 获得手机号码
  6. android下usb框架系列文章---(3)Storage
  7. ANDROID PAD版本 PHONE版本 源码有什么
  8. Android(安卓)drawable state各个属性详
  9. android bootloader (lk)
  10. 〖Android〗CM10.2编译错误解决