Android拍照上传功能示例代码
本文实例讲述了Android实现拍照上传功能的方法。分享给大家供大家参考,具体如下:
1、LoginWindow.java--登录窗口
packagecom.hemi.rhet; importcom.hemi.rhet.R; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.KeyEvent; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.CheckBox; importandroid.widget.EditText; publicclassLoginWindowextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ System.out.println("enterLoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.login_window); mUserName=(EditText)findViewById(R.id.username); mUserPasswd=(EditText)findViewById(R.id.userpasswd); cbx_cmwap=(CheckBox)findViewById(R.id.cbx_cmwap); loginButton=(Button)findViewById(R.id.login_button); exitButton=(Button)findViewById(R.id.exit_button); loginBtnListener=newView.OnClickListener(){ publicvoidonClick(Viewview){ LoginWindow.isCmwap=cbx_cmwap.isChecked(); if(view==loginButton){ launchFetion(); }elseif(view==exitButton){ finish(); } } }; loginButton.setOnClickListener(loginBtnListener); exitButton.setOnClickListener(loginBtnListener); } privatevoidlaunchFetion(){ Intenti=newIntent(this,FuncSelector.class); i.putExtra(KEY_LOGIN_NAME,mUserName.getText().toString()); i.putExtra(KEY_LOGIN_PASSWD,mUserPasswd.getText().toString()); i.putExtra(KEY_LOGIN_TYPE,cbx_cmwap.isChecked()); startActivity(i); } @Override publicbooleanonKeyDown(intkeyCode,KeyEventmsg){ //System.out.println("enteronKeyDown()inLoginWindow!"); // //if(null!=loginBtnListener){ //Viewaview=getCurrentFocus(); //loginBtnListener.onClick(aview); //} returnfalse; } privateButtonloginButton,exitButton; privateEditTextmUserName; privateEditTextmUserPasswd; privateCheckBoxcbx_cmwap; privateOnClickListenerloginBtnListener; publicstaticfinalStringKEY_LOGIN_NAME="login_name"; publicstaticfinalStringKEY_LOGIN_PASSWD="login_passwd"; publicstaticfinalStringKEY_LOGIN_TYPE="login_type"; publicstaticbooleanisCmwap=false; }
2.FuncSelector.java--功能模块选择窗口
packagecom.hemi.rhet; importjava.util.ArrayList; importjava.util.HashMap; importcom.hemi.rhet.R; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.GridView; importandroid.widget.SimpleAdapter; importandroid.widget.AdapterView.OnItemClickListener; publicclassFuncSelectorextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ Log.i("info","enterLoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.func_selector); initFuncGrids(); } privatevoidinitFuncGrids(){ GridViewfuncSeleView=(GridView)findViewById(R.id.func_selector); //生成动态数组,并且转入数据 ArrayList<HashMap<String,Object>>lstImageItem=newArrayList<HashMap<String,Object>>(); HashMap<String,Object>map=newHashMap<String,Object>(); map.put("ItemImage",R.drawable.photo_upload);//添加图像资源的ID map.put("ItemText",getString(R.string.photo_upload));//按序号做ItemText lstImageItem.add(map); map=newHashMap<String,Object>(); map.put("ItemImage",R.drawable.icon); map.put("ItemText",getString(R.string.sys_config)); lstImageItem.add(map); for(inti=1;i<=10;i++){ map=newHashMap<String,Object>(); map.put("ItemImage",R.drawable.icon);//添加图像资源的ID map.put("ItemText","NO."+String.valueOf(i));//按序号做ItemText lstImageItem.add(map); } //生成适配器的ImageItem<====>动态数组的元素,两者一一对应 SimpleAdaptersaImageItems=newSimpleAdapter(this,//没什么解释 lstImageItem,//数据来源 R.layout.night_item,//night_item的XML实现 //动态数组与ImageItem对应的子项 newString[]{"ItemImage","ItemText"}, //ImageItem的XML文件里面的一个ImageView,两个TextViewID newint[]{R.id.ItemImage,R.id.ItemText}); //null); //添加并且显示 funcSeleView.setAdapter(saImageItems); //saImageItems.notifyDataSetChanged(); //添加消息处理 funcSeleView.setOnItemClickListener(newItemClickListener()); } publicbooleanonCreateOptionsMenu(Menumenu){ super.onCreateOptionsMenu(menu); menu.add(0,EXIT_ID,0,R.string.back_button); returntrue; } //@Override publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){ booleanresult=true; switch(item.getItemId()){ caseEXIT_ID: this.finish(); break; default: result=super.onMenuItemSelected(featureId,item); break; } returnresult; } //当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件 classItemClickListenerimplementsOnItemClickListener{ publicvoidonItemClick(AdapterView<?>arg0,//TheAdapterViewwherethe //clickhappened Viewarg1,//TheviewwithintheAdapterViewthatwasclicked intarg2,//Thepositionoftheviewintheadapter longarg3//Therowidoftheitemthatwasclicked ){ //在本例中arg2=arg3 HashMap<String,Object>item=(HashMap<String,Object>)arg0 .getItemAtPosition(arg2); StringtmpStr=(String)item.get("ItemText"); //item.put("ItemText",tmpStr+tmpStr.substring(tmpStr.length()-1)); //显示所选Item的ItemText //setTitle((String)item.get("ItemText")); Log.i("info",(String)item.get("ItemText")); ((SimpleAdapter)arg0.getAdapter()).notifyDataSetChanged(); Intenti; switch(arg2){ case0: i=newIntent(); i.setClass(FuncSelector.this,PhotoUpload.class); startActivity(i); break; case1: i=newIntent(); i.setClass(FuncSelector.this,ConfigWindow.class); startActivity(i); break; default: break; } } } privatestaticfinalintTAKE_PHOTO_ID=Menu.FIRST; privatestaticfinalintUPLOAD_PHOTO_ID=Menu.FIRST+1; privatestaticfinalintEXIT_ID=Menu.FIRST+3; }//FuncSelector
3.PhotoUpload.java--照片上传模块
packagecom.hemi.rhet; importjava.io.BufferedReader; importjava.io.ByteArrayOutputStream; importjava.io.DataOutputStream; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStreamReader; importjava.io.OutputStream; importjava.io.UnsupportedEncodingException; importjava.net.HttpURLConnection; importjava.net.MalformedURLException; importjava.net.URL; importjava.text.SimpleDateFormat; importjava.util.ArrayList; importjava.util.Date; importjava.util.HashMap; importjava.util.List; importorg.apache.http.Header; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.ClientProtocolException; importorg.apache.http.client.HttpClient; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.entity.FileEntity; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importcom.hemi.rhet.R; importandroid.app.Activity; importandroid.content.Intent; importandroid.graphics.Bitmap; importandroid.net.Uri; importandroid.os.Bundle; importandroid.os.Environment; importandroid.util.Log; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.GridView; importandroid.widget.ImageView; importandroid.widget.SimpleAdapter; importandroid.widget.Toast; importandroid.widget.AdapterView.OnItemClickListener; publicclassPhotoUploadextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ Log.i("info","enterLoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.func_selector); } @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); if(TAKE_PHOTO_ID==requestCode){ if(resultCode!=RESULT_OK)return; Bundleextras=data.getExtras(); try{ BitmapphotoCaptured=(Bitmap)extras.get("data"); ImageViewimg=newImageView(this); img.setImageBitmap(photoCaptured); setContentView(img); //storetosdcard ByteArrayOutputStreambaos=newByteArrayOutputStream(); photoCaptured.compress(Bitmap.CompressFormat.JPEG,100,baos); byte[]photoBytes=baos.toByteArray(); FileaFile=newFile(getDatedFName(SD_CARD_TEMP_DIR)); photoPath=aFile.getAbsolutePath(); booleanb; if(aFile.exists())b=aFile.delete(); //f.mkdirs(); aFile.createNewFile();//needaddpermissiontomanifest FileOutputStreamfos=newFileOutputStream(aFile); fos.write(photoBytes); fos.close(); Log.d("info","onPictureTaken-wrotebytes:" +photoBytes.length); UricapturedImage=Uri .parse(android.provider.MediaStore.Images.Media .insertImage(getContentResolver(),aFile .getAbsolutePath(),null,null)); Log.i("camera","Selectedimage:"+capturedImage.toString()); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } }elseif(UPLOAD_PHOTO_ID==requestCode){ } } publicbooleanonCreateOptionsMenu(Menumenu){ super.onCreateOptionsMenu(menu); menu.add(0,TAKE_PHOTO_ID,0,R.string.take_photo); menu.add(0,UPLOAD_PHOTO_ID,0,R.string.upload_photo); menu.add(0,BACK_ID,0,R.string.back_button); returntrue; } //@Override publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){ booleanresult=true; switch(item.getItemId()){ caseTAKE_PHOTO_ID: Log.i("info","readytotakephotos!"); Intenti=newIntent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(i,TAKE_PHOTO_ID); result=true; break; caseUPLOAD_PHOTO_ID: uploadFile2Svr(); break; caseBACK_ID: this.finish(); break; default: result=super.onMenuItemSelected(featureId,item); break; } returnresult; } publicvoiduploadFile2Svr(){ HttpClienthttpclient=newDefaultHttpClient(); StringurlStr=newStringBuffer().append(HTTP_PROTOCOL) .append(/*SERVER_IP*/ConfigWindow.getServerIp()) .append(':') .append(/*SERVER_PORT*/ConfigWindow.getServerPort()) .append(FILE_UPLOADER_URL) .toString(); HttpPosthttppost=newHttpPost(urlStr); StringuploadMsg="上传照片失败!"; try{ List<NameValuePair>nameValuePairs=newArrayList<NameValuePair>(); //YourDATA nameValuePairs.add(newBasicNameValuePair("filename",("IMAGE.jpg"))); //nameValuePairs.add(newBasicNameValuePair("orderno","1")); //nameValuePairs.add(newBasicNameValuePair("userid","123")); //nameValuePairs.add(newBasicNameValuePair("attach_type","1")); //httppost.setEntity(newUrlEncodedFormEntity(nameValuePairs)); FileaFile=newFile(photoPath); Log.i("info--photoPath:",photoPath); FileEntityfileEty=newFileEntity(aFile,"binary/octet-stream"); httppost.setEntity(fileEty); httppost.addHeader("filename",/*("IMAGE.jpg")*/aFile.getName()); HttpResponseresponse; response=httpclient.execute(httppost); //Log.i("info--response:",response.getStatusLine().getReasonPhrase()); Header[]headers=response.getAllHeaders(); headers=response.getHeaders("resultcode"); if(headers[0].getValue().equals("0")){ uploadMsg="上传照片成功!"; } }catch(UnsupportedEncodingExceptione){ //e.printStackTrace(); uploadMsg+=e.toString(); Log.e("exception",e.toString()); }catch(ClientProtocolExceptione){ //e.printStackTrace(); uploadMsg+=e.toString(); Log.e("exception",e.toString()); }catch(IOExceptione){ //e.printStackTrace(); uploadMsg+=e.toString(); Log.e("exception",e.toString()); }finally{ Toast.makeText(PhotoUpload.this,uploadMsg, Toast.LENGTH_LONG).show(); httpclient.getConnectionManager().shutdown(); } } publicvoiduploadFile2Svr2(){ BufferedReaderin=null; HttpClienthttpclient=newDefaultHttpClient(); StringurlStr=newStringBuffer().append(HTTP_PROTOCOL) .append(ConfigWindow.getServerIp()) .append(ConfigWindow.getServerPort()) .append(FILE_UPLOADER_URL) .toString(); URLurl=null; try{ url=newURL(urlStr); }catch(MalformedURLExceptione1){ e1.printStackTrace(); } HttpURLConnectionconn=null; DataOutputStreamdos=null; StringlineEnd="/r/n"; StringtwoHyphens="--"; Stringboundary="*****"; intmaxBufferSize=16*1024; try{ //List<NameValuePair>nameValuePairs=newArrayList<NameValuePair>(); ////YourDATA //nameValuePairs.add(newBasicNameValuePair("filename",getDatedFName("IMAGE.jpg"))); //nameValuePairs.add(newBasicNameValuePair("orderno","1")); //nameValuePairs.add(newBasicNameValuePair("userid","123")); //nameValuePairs.add(newBasicNameValuePair("attach_type","1")); //httppost.setEntity(newUrlEncodedFormEntity(nameValuePairs)); //OpenaHTTPconnectiontotheURL conn=(HttpURLConnection)url.openConnection(); conn.setConnectTimeout(120000); //AllowInputs conn.setDoInput(true); //AllowOutputs conn.setDoOutput(true); //Don'tuseacachedcopy. conn.setUseCaches(false); //Useapostmethod. conn.setRequestMethod("POST"); conn.setRequestProperty("Connection","Keep-Alive"); conn.setRequestProperty("Content-Type", //"multipart/form-data;boundary="+boundary); "application/x-www-form-urlencoded"); conn.setRequestProperty("user-agent", "Mozilla/5.0(Windows;U;WindowsNT5.2;zh-CN;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6GTB6"); //conn.setRequestProperty("accept-language","zh-cn,zh;q=0.5"); //conn.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary); conn.connect(); //OutputStreamconnOs=conn.getOutputStream(); dos=newDataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens+boundary+lineEnd); dos.writeBytes("Content-Disposition:form-data;name=/"uploadedfile/";filename=/"" +"exsistingFileName"+"/""+lineEnd); //dos.writeBytes(lineEnd); Log.i("info","Headersarewritten"); //uploadfiletowebserverviahttp FileInputStreamfileInputStream=newFileInputStream(photoPath); //createabufferofmaximumsize intbytesAvailable=fileInputStream.available(); intbufferSize=Math.min(bytesAvailable,maxBufferSize); byte[]buffer=newbyte[bufferSize]; //readfileandwriteitintoform... intbytesRead=fileInputStream.read(buffer,0,bufferSize); while(bytesRead>0){ dos.write(buffer,0,bufferSize); bytesAvailable=fileInputStream.available(); bufferSize=Math.min(bytesAvailable,maxBufferSize); bytesRead=fileInputStream.read(buffer,0,bufferSize); } //sendmultipartformdatanecesssaryafterfiledata... dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens+boundary+twoHyphens+lineEnd); //closestreams Log.e("info","Fileiswritten"); fileInputStream.close(); dos.flush(); dos.close(); dos=null; //response //HttpResponseresponse; //response=httpclient.execute(httppost); //response=httpclient.execute(conn.get); in=newBufferedReader( newInputStreamReader(conn.getInputStream())); StringBuffersb=newStringBuffer(""); Stringline=""; StringNL=System.getProperty("line.separator"); while((line=in.readLine())!=null){ sb.append(line+NL); } in.close(); Stringresult=sb.toString(); Log.i("info",result); }catch(ClientProtocolExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ if(in!=null){ try{ in.close(); }catch(IOExceptionioe){ Log.e("error",ioe.toString()); } } } } publicstaticStringgetDatedFName(Stringfname){ StringBufferresult=newStringBuffer(); SimpleDateFormatdf=newSimpleDateFormat("yyMMddHHmmss"); StringdateSfx="_"+df.format(newDate()); intidx=fname.lastIndexOf('.'); if(idx!=-1){ result.append(fname.substring(0,idx)); result.append(dateSfx); result.append(fname.substring(idx)); }else{ result.append(fname); result.append(dateSfx); } returnresult.toString(); } //============================================= //privateBitmapphotoCaptured; privateStringphotoPath="/sdcard/IMAGE_100225083437.jpg";//"/sdcard/1.txt"; privatestaticfinalintTAKE_PHOTO_ID=Menu.FIRST; privatestaticfinalintUPLOAD_PHOTO_ID=Menu.FIRST+1; privatestaticfinalintBACK_ID=Menu.FIRST+3; privatestaticfinalStringHTTP_PROTOCOL="http://"; privatestaticfinalStringFILE_UPLOADER_URL="/fileuploader/system/fileUpload"; privateStringSD_CARD_TEMP_DIR=Environment.getExternalStorageDirectory()+File.separator+"IMG.jpg"; }
4.ConfigWindow.java--系统配置窗口
packagecom.hemi.rhet; importcom.hemi.rhet.R; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.KeyEvent; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.CheckBox; importandroid.widget.EditText; publicclassConfigWindowextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ System.out.println("enterConfigWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.config_window); mServerIP=(EditText)findViewById(R.id.serverip); mServerPort=(EditText)findViewById(R.id.serverport); //hemerr mServerIP.setText(serverIp); mServerPort.setText(serverPort); okButton=(Button)findViewById(R.id.ok_button); backButton=(Button)findViewById(R.id.back_button); loginBtnListener=newView.OnClickListener(){ publicvoidonClick(Viewview){ if(view==okButton){ serverIp=mServerIP.getText().toString(); serverPort=mServerPort.getText().toString(); Log.i("info","IPis:"+serverIp+"/tPortis:"+serverPort); finish(); }elseif(view==backButton){ finish(); } } }; okButton.setOnClickListener(loginBtnListener); backButton.setOnClickListener(loginBtnListener); } privatevoidlaunchFetion(){ Intenti=newIntent(this,FuncSelector.class); i.putExtra(KEY_LOGIN_NAME,mServerIP.getText().toString()); i.putExtra(KEY_LOGIN_PASSWD,mServerPort.getText().toString()); startActivity(i); } @Override publicbooleanonKeyDown(intkeyCode,KeyEventmsg){ //System.out.println("enteronKeyDown()inLoginWindow!"); // //if(null!=loginBtnListener){ //Viewaview=getCurrentFocus(); //loginBtnListener.onClick(aview); //} returnfalse; } publicstaticStringgetServerIp(){ returnserverIp; } publicstaticStringgetServerPort(){ returnserverPort; } privateButtonokButton,backButton; privateEditTextmServerIP; privateEditTextmServerPort; privateOnClickListenerloginBtnListener; publicstaticfinalStringKEY_LOGIN_NAME="login_name"; publicstaticfinalStringKEY_LOGIN_PASSWD="login_passwd"; publicstaticfinalStringKEY_LOGIN_TYPE="login_type"; publicstaticStringserverIp="192.168.0.98";//; publicstaticStringserverPort="8081"; }
还需要增加bg_logo.jpg、icon.png、photo_upload.png等几个图片。
Android拍照上传程序的xml配置文件
1.login_window.xml
<?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" android:background="@drawable/bg_logo" > <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/user_name" /> <EditText android:id="@+id/username" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:text="user" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/user_passwd"/> <EditTextandroid:id="@+id/userpasswd" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:text="user" android:capitalize="none" android:gravity="fill_horizontal" android:password="true" android:textAppearance="?android:attr/textAppearanceMedium"/> <CheckBoxandroid:id="@+id/cbx_cmwap" android:text="CMWAP" android:checked="false" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RelativeLayoutandroid:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Buttonandroid:id="@+id/login_button" android:text="LOGIN" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Buttonandroid:id="@+id/exit_button" android:text="EXIT" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_toLeftOf="@id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> </LinearLayout>
2.func_selector.xml
<?xmlversion="1.0"encoding="utf-8"?> <GridViewxmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/func_selector" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:columnWidth="90dp" android:stretchMode="columnWidth" android:gravity="center" android:background="@drawable/bg_logo" />
3.night_item.xml
<?xmlversion="1.0"encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip"android:layout_width="fill_parent"> <ImageView android:layout_height="wrap_content" android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_centerHorizontal="true"> </ImageView> <TextView android:layout_width="wrap_content" android:layout_below="@+id/ItemImage" android:layout_height="wrap_content" android:text="TextView01" android:layout_centerHorizontal="true" android:id="@+id/ItemText"> </TextView> </RelativeLayout>
4.config_window.xml
<?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" > <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/server_ip" /> <EditText android:id="@+id/serverip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextViewandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/server_port"/> <EditTextandroid:id="@+id/serverport" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium"/> <RelativeLayoutandroid:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Buttonandroid:id="@+id/ok_button" android:text="@string/ok_button" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Buttonandroid:id="@+id/back_button" android:text="@string/back_button" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_toLeftOf="@id/ok_button" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> </LinearLayout>
5.AndroidManifest.xml
<?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.hemi.rhet"android:versionCode="1"android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:label="@string/app_name"android:name="LoginWindow"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name="FuncSelector"></activity> <activityandroid:name="PhotoUpload"></activity> <activityandroid:name="ConfigWindow"></activity> </application> <uses-sdkandroid:minSdkVersion="5"/> <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> </manifest>
Android拍照上传程序的Servlet程序样例
UploadFileServlet.java:
packagecom.hemi.rhet.servlet; importjava.io.*; importjava.net.InetAddress; importjava.net.UnknownHostException; importjava.sql.SQLException; importjava.text.SimpleDateFormat; importjava.util.*; importjavax.servlet.*; importjavax.servlet.http.*; //importorg.apache.commons.fileupload.*; //importorg.apache.commons.fileupload.disk.DiskFileItemFactory; //importorg.apache.commons.fileupload.servlet.ServletFileUpload; //importorg.apache.commons.lang.time.DateUtils; importorg.apache.log4j.Logger; //importorg.apache.struts2.ServletActionContext; publicclassUploadFileServletextendsHttpServlet { privatestaticLoggerlog=Logger.getLogger(UploadFileServlet.class); privatestaticfinalStringOBLIQUE_LINE="/"; privatestaticfinalStringOPPOSITE_OBLIQUE_LINE="////"; privatestaticfinalStringWEBPOSITION="webapps"; privatestaticfinalStringSBPATH="UploadedFiles/"; Fileoutdir=null; Fileoutfile=null; FileOutputStreamfos=null; BufferedInputStreambis=null; byte[]bs=newbyte[1024]; StringuploadFName=null; StringorderNo=null; StringuserId=null; StringattachType="2"; publicvoidinit()throwsServletException { //if(log.isDebugEnabled()) //{ //log.debug("进入init()方法!!"); //} } publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException { doPost(request,response); } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException { Stringroot=this.getServletContext().getRealPath("/"); root=root.replaceAll("////","/"); try { StringBufferdestFName=newStringBuffer(); destFName.append(getRealDir(root)).append(SBPATH); outdir=newFile(destFName.toString()); request.setCharacterEncoding("UTF-8"); uploadFName=request.getParameter("filename");//nameofuploadedfile uploadFName=request.getHeader("filename"); if(isEmpty(uploadFName))uploadFName="filename.jpg"; //orderNo=request.getParameter("orderno");//idoftheorderorworksheet //userId=request.getParameter("userid");//idoftheuserwhouploadthefile //attachType=request.getParameter("attach_type");//typeofattachment,refertofile.FileBean'sdefinition Stringdesc=request.getParameter("desc");//descriptionofuploadedfile if(desc==null)desc=""; if(true) { destFName.append(getDatedFName(uploadFName)); outfile=newFile(destFName.toString()); bis=newBufferedInputStream(request.getInputStream()); uploadFile(); //response.getWriter().write("0");//success response.setHeader("resultcode","0"); } elseif(desc.length()>400/2){ //response.getWriter().write("3");//illegaldescription response.setHeader("resultcode","3"); } else { if(log.isDebugEnabled()) { log.debug("调用格式错误!"); } response.sendError(100,"参数错误!"); //response.getWriter().write("1"); response.setHeader("resultcode","1");//parametererror //return; } }catch(SQLExceptione){ if(log.isDebugEnabled()){ log.debug(e); } //response.getWriter().write("6");//failureofinserttodatabase response.setHeader("resultcode","6"); }catch(Exceptione){ if(log.isDebugEnabled()){ log.debug(e); } //response.getWriter().write("7");//failure response.setHeader("resultcode","7"); }finally{ if(null!=bis) bis.close(); if(null!=fos) fos.close(); } } privatevoiduploadFile()throwsIOException { if(log.isDebugEnabled()) { log.debug("outdir:"+outdir.getPath()); log.debug("outfile:"+outfile.getPath()); } if(!outdir.exists()) outdir.mkdir(); if(!outfile.exists()) outfile.createNewFile(); fos=newFileOutputStream(outfile); inti; while((i=bis.read(bs))!=-1) { fos.write(bs,0,i); } } publicstaticStringgetDatedFName(Stringfname){ StringBufferresult=newStringBuffer(); SimpleDateFormatdf=newSimpleDateFormat("yyMMddHHmmss"); StringdateSfx="_"+df.format(newDate()); intidx=fname.lastIndexOf('.'); if(idx!=-1){ result.append(fname.substring(0,idx)); result.append(dateSfx); result.append(fname.substring(idx)); }else{ result.append(fname); result.append(dateSfx); } returnresult.toString(); } publicstaticStringgetUrlFName(Stringfname,HttpServletRequestrequest){ Stringresult=""; if(isEmpty(fname))returnresult; try{ if(fname.startsWith("http://")){ result=fname; }else{ //HttpServletRequestrequest=ServletActionContext.getServletContext().getRgetRequest(); //UserAndOrganAndRoleuser=(UserAndOrganAndRole)request.getSession().getAttribute("user"); Stringip=request.getServerName(); intport=request.getServerPort(); result=fname.substring(fname.indexOf(UploadFileServlet.SBPATH)); StringBuffertmpBuff=newStringBuffer(); tmpBuff.append("http://").append(ip).append(":").append(port).append(OBLIQUE_LINE).append(result); //Sample:http://localhost:8083/UploadedFiles/IMAGE_067_100222102521.jpg result=tmpBuff.toString(); } }catch(Exceptionex){ ex.printStackTrace(); } System.out.println("resultis:"+result); returnresult; } publicstaticbooleanisEmpty(Stringstr){ return((str==null)||(str.length()==0)); } /** *MethodgetRealDirsearchwebappsposition * *@paramdespath * *@return * */ privateStringgetRealDir(StringnewFileNameRoot)throwsException{ if(newFileNameRoot==null) thrownewException("getrealdirfailed!"); intdp=newFileNameRoot .lastIndexOf(OBLIQUE_LINE); if(dp==-1) thrownewException("invalidpath!"); intdpbefore=newFileNameRoot.lastIndexOf( OBLIQUE_LINE,dp-1); if(dpbefore==-1) thrownewException("invalidpath!"); StringneedSubStr=newFileNameRoot.substring(dpbefore+1,dp); StringnextStr=newFileNameRoot.substring(0,dpbefore+1); if(!needSubStr.trim().equals(WEBPOSITION)){ returngetRealDir(nextStr); }else returnnewFileNameRoot; } publicstaticvoidmain(String[]args) { } }
web.xml:
<?xmlversion="1.0"encoding="UTF-8"?> <web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Upload</servlet-name> <servlet-class>com.hemi.rhet.servlet.UploadFileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload</servlet-name> <url-pattern>/system/fileUpload</url-pattern> </servlet-mapping> </web-app>
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android拍照与图片处理技巧总结》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。