Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 移动开发 / Android / Android拍照上传功能示例代码

本文实例讲述了Android实现拍照上传功能的方法。分享给大家供大家参考,具体如下:
1、LoginWindow.java --登录窗口
package com.hemi.rhet;import com.hemi.rhet.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;public class LoginWindow extends Activity { @Override public void onCreate(Bundle savedInstanceState) {System.out.println("enter LoginWindow.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 = new View.OnClickListener() { public void onClick(View view) {LoginWindow.isCmwap = cbx_cmwap.isChecked();if (view == loginButton) {launchFetion();} else if(view == exitButton) { finish();} }};loginButton.setOnClickListener(loginBtnListener);exitButton.setOnClickListener(loginBtnListener); } private void launchFetion() {Intent i = new Intent(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 public boolean onKeyDown(int keyCode, KeyEvent msg) {//System.out.println("enter onKeyDown() in LoginWindow!");////if (null != loginBtnListener) {// View aview = getCurrentFocus();// loginBtnListener.onClick(aview);//}return false; } private Button loginButton, exitButton; private EditText mUserName; private EditText mUserPasswd; private CheckBox cbx_cmwap; private OnClickListener loginBtnListener; public static final String KEY_LOGIN_NAME = "login_name"; public static final String KEY_LOGIN_PASSWD = "login_passwd"; public static final String KEY_LOGIN_TYPE = "login_type"; public static boolean isCmwap = false;}
2. FuncSelector.java -- 功能模块选择窗口
package com.hemi.rhet;import java.util.ArrayList;import java.util.HashMap;import com.hemi.rhet.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.AdapterView.OnItemClickListener;public class FuncSelector extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {Log.i("info", "enter LoginWindow.onCreate()!");super.onCreate(savedInstanceState);setContentView(R.layout.func_selector);initFuncGrids();}private void initFuncGrids() {GridView funcSeleView = (GridView) findViewById(R.id.func_selector);// 生成动态数组,并且转入数据ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();HashMap<String, Object> map = new HashMap<String, Object>();map.put("ItemImage", R.drawable.photo_upload);// 添加图像资源的IDmap.put("ItemText", getString(R.string.photo_upload));// 按序号做ItemTextlstImageItem.add(map);map = new HashMap<String, Object>();map.put("ItemImage", R.drawable.icon);map.put("ItemText", getString(R.string.sys_config));lstImageItem.add(map);for (int i = 1; i <= 10; i++) {map = new HashMap<String, Object>();map.put("ItemImage", R.drawable.icon);// 添加图像资源的IDmap.put("ItemText", "NO." + String.valueOf(i));// 按序号做ItemTextlstImageItem.add(map);}// 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应SimpleAdapter saImageItems = new SimpleAdapter(this, // 没什么解释lstImageItem,// 数据来源R.layout.night_item,// night_item的XML实现// 动态数组与ImageItem对应的子项new String[] { "ItemImage", "ItemText" },// ImageItem的XML文件里面的一个ImageView,两个TextView IDnew int[] {R.id.ItemImage,R.id.ItemText});//null);// 添加并且显示funcSeleView.setAdapter(saImageItems);//saImageItems.notifyDataSetChanged();// 添加消息处理funcSeleView.setOnItemClickListener(new ItemClickListener());}public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);menu.add(0, EXIT_ID,0, R.string.back_button);return true;}//@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { boolean result = true;switch(item.getItemId()) {case EXIT_ID:this.finish();break;default:result = super.onMenuItemSelected(featureId, item);break;}return result; }// 当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件class ItemClickListener implements OnItemClickListener {public void onItemClick(AdapterView<?> arg0,// The AdapterView where the// click happenedView arg1,// The view within the AdapterView that was clickedint arg2,// The position of the view in the adapterlong arg3// The row id of the item that was clicked) {// 在本例中arg2=arg3HashMap<String, Object> item = (HashMap<String, Object>) arg0.getItemAtPosition(arg2);String tmpStr = (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();Intent i;switch (arg2) {case 0:i = new Intent();i.setClass(FuncSelector.this, PhotoUpload.class);startActivity(i);break;case 1:i = new Intent();i.setClass(FuncSelector.this, ConfigWindow.class);startActivity(i);break;default:break;}}}private static final int TAKE_PHOTO_ID = Menu.FIRST; private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1; private static final int EXIT_ID = Menu.FIRST + 3;}//FuncSelector
3. PhotoUpload.java -- 照片上传模块
package com.hemi.rhet;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;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.InputStreamReader;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import org.apache.http.Header;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.FileEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import com.hemi.rhet.R;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.ImageView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class PhotoUpload extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {Log.i("info", "enter LoginWindow.onCreate()!");super.onCreate(savedInstanceState);setContentView(R.layout.func_selector);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (TAKE_PHOTO_ID == requestCode) {if (resultCode != RESULT_OK) return;Bundle extras = data.getExtras();try {Bitmap photoCaptured = (Bitmap) extras.get("data");ImageView img = new ImageView(this);img.setImageBitmap(photoCaptured);setContentView(img);//store to sd cardByteArrayOutputStream baos = new ByteArrayOutputStream();photoCaptured.compress(Bitmap.CompressFormat.JPEG, 100, baos);byte[] photoBytes = baos.toByteArray();File aFile = new File(getDatedFName(SD_CARD_TEMP_DIR));photoPath = aFile.getAbsolutePath();boolean b;if (aFile.exists()) b = aFile.delete();//f.mkdirs();aFile.createNewFile(); //need add permission to manifestFileOutputStream fos = new FileOutputStream(aFile);fos.write(photoBytes);fos.close();Log.d("info", "onPictureTaken - wrote bytes: "+ photoBytes.length);Uri capturedImage = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), aFile.getAbsolutePath(), null, null));Log.i("camera", "Selected image: " + capturedImage.toString());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} else if (UPLOAD_PHOTO_ID == requestCode) {}} public boolean onCreateOptionsMenu(Menu menu) {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);return true; } //@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { boolean result = true;switch(item.getItemId()) {case TAKE_PHOTO_ID:Log.i("info", "ready to take photos!");Intent i = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(i, TAKE_PHOTO_ID);result = true;break;case UPLOAD_PHOTO_ID:uploadFile2Svr();break;case BACK_ID:this.finish();break;default:result = super.onMenuItemSelected(featureId, item);break;}return result; } public void uploadFile2Svr() { HttpClient httpclient = new DefaultHttpClient(); String urlStr = new StringBuffer().append(HTTP_PROTOCOL) .append(/*SERVER_IP*/ConfigWindow.getServerIp()) .append(":") .append(/*SERVER_PORT*/ConfigWindow.getServerPort()) .append(FILE_UPLOADER_URL) .toString();HttpPost httppost = new HttpPost(urlStr);String uploadMsg = "上传 照片失败!"; try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); // Your DATA nameValuePairs.add(new BasicNameValuePair("filename", ("IMAGE.jpg")) );//nameValuePairs.add(new BasicNameValuePair("orderno", "1"));//nameValuePairs.add(new BasicNameValuePair("userid", "123"));//nameValuePairs.add(new BasicNameValuePair("attach_type", "1"));// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); File aFile = new File(photoPath); Log.i("info -- photoPath: ", photoPath); FileEntity fileEty = new FileEntity(aFile, "binary/octet-stream"); httppost.setEntity(fileEty); httppost.addHeader("filename", /*("IMAGE.jpg")*/aFile.getName());HttpResponse response;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 (UnsupportedEncodingException e) {//e.printStackTrace();uploadMsg += e.toString();Log.e("exception", e.toString());} catch (ClientProtocolException e) {//e.printStackTrace();uploadMsg += e.toString();Log.e("exception", e.toString());} catch (IOException e) {//e.printStackTrace();uploadMsg += e.toString();Log.e("exception", e.toString());} finally {Toast.makeText(PhotoUpload.this, uploadMsg, Toast.LENGTH_LONG).show();httpclient.getConnectionManager().shutdown();} } public void uploadFile2Svr2() { BufferedReader in = null; HttpClient httpclient = new DefaultHttpClient(); String urlStr = new StringBuffer().append(HTTP_PROTOCOL).append(ConfigWindow.getServerIp()).append(ConfigWindow.getServerPort()) .append(FILE_UPLOADER_URL) .toString(); URL url = null;try {url = new URL(urlStr);} catch (MalformedURLException e1) {e1.printStackTrace();}HttpURLConnection conn = null;DataOutputStream dos = null;String lineEnd = "/r/n";String twoHyphens = "--";String boundary = "*****";int maxBufferSize = 16 * 1024;try {//List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();//// Your DATA//nameValuePairs.add(new BasicNameValuePair("filename", getDatedFName("IMAGE.jpg")) );//nameValuePairs.add(new BasicNameValuePair("orderno", "1"));//nameValuePairs.add(new BasicNameValuePair("userid", "123"));//nameValuePairs.add(new BasicNameValuePair("attach_type", "1"));//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));// Open a HTTP connection to the URLconn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(120000);// Allow Inputsconn.setDoInput(true);// Allow Outputsconn.setDoOutput(true);// Don"t use a cached copy.conn.setUseCaches(false);// Use a post method.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; Windows NT 5.2; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6"); //conn.setRequestProperty("accept-language", "zh-cn,zh;q=0.5"); //conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ boundary); conn.connect(); //OutputStream connOs = conn.getOutputStream(); dos = new DataOutputStream(conn.getOutputStream());dos.writeBytes(twoHyphens + boundary + lineEnd);dos.writeBytes("Content-Disposition: form-data; name=/"uploadedfile/";filename=/""+ "exsistingFileName" + "/"" + lineEnd);//dos.writeBytes(lineEnd);Log.i("info", "Headers are written");// upload file to webserver via httpFileInputStream fileInputStream = new FileInputStream(photoPath);// create a buffer of maximum sizeint bytesAvailable = fileInputStream.available();int bufferSize = Math.min(bytesAvailable, maxBufferSize);byte[] buffer = new byte[bufferSize];// read file and write it into form...int bytesRead = 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);}// send multipart form data necesssary after file data...dos.writeBytes(lineEnd);dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);// close streamsLog.e("info", "File is written");fileInputStream.close();dos.flush();dos.close();dos = null;// response// HttpResponse response;// response = httpclient.execute(httppost);// response = httpclient.execute(conn.get);in = new BufferedReader(new InputStreamReader(conn.getInputStream()));StringBuffer sb = new StringBuffer("");String line = "";String NL = System.getProperty("line.separator");while ((line = in.readLine()) != null) {sb.append(line + NL);}in.close();String result = sb.toString();Log.i("info", result);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally{ if(in != null){try{ in.close();}catch(IOException ioe){ Log.e("error", ioe.toString());} }} } public static String getDatedFName(String fname) {StringBuffer result = new StringBuffer();SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");String dateSfx = "_" + df.format(new Date());int idx = 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);}return result.toString();}//============================================= //private Bitmap photoCaptured; private String photoPath = "/sdcard/IMAGE_100225083437.jpg"; //"/sdcard/1.txt"; private static final int TAKE_PHOTO_ID = Menu.FIRST; private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1; private static final int BACK_ID = Menu.FIRST + 3; private static final String HTTP_PROTOCOL = "http://"; private static final String FILE_UPLOADER_URL = "/fileuploader/system/fileUpload"; private String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator + "IMG.jpg";}
4. ConfigWindow.java--系统配置窗口
package com.hemi.rhet;import com.hemi.rhet.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;public class ConfigWindow extends Activity { @Override public void onCreate(Bundle savedInstanceState) {System.out.println("enter ConfigWindow.onCreate()!");super.onCreate(savedInstanceState);setContentView(R.layout.config_window);mServerIP = (EditText)findViewById(R.id.serverip);mServerPort = (EditText)findViewById(R.id.serverport);//hemerrmServerIP.setText(serverIp);mServerPort.setText(serverPort);okButton = (Button) findViewById(R.id.ok_button);backButton = (Button) findViewById(R.id.back_button);loginBtnListener = new View.OnClickListener() { public void onClick(View view) {if (view == okButton) {serverIp = mServerIP.getText().toString();serverPort = mServerPort.getText().toString();Log.i("info", "IP is: "+serverIp+"/tPort is: "+serverPort);finish();} else if(view == backButton) {finish();} }};okButton.setOnClickListener(loginBtnListener);backButton.setOnClickListener(loginBtnListener); } private void launchFetion() {Intent i = new Intent(this, FuncSelector.class);i.putExtra(KEY_LOGIN_NAME, mServerIP.getText().toString());i.putExtra(KEY_LOGIN_PASSWD, mServerPort.getText().toString());startActivity(i); } @Override public boolean onKeyDown(int keyCode, KeyEvent msg) {//System.out.println("enter onKeyDown() in LoginWindow!");////if (null != loginBtnListener) {// View aview = getCurrentFocus();// loginBtnListener.onClick(aview);//}return false; } public static String getServerIp() {return serverIp;}public static String getServerPort() {return serverPort;} private Button okButton, backButton; private EditText mServerIP; private EditText mServerPort; private OnClickListener loginBtnListener; public static final String KEY_LOGIN_NAME = "login_name"; public static final String KEY_LOGIN_PASSWD = "login_passwd"; public static final String KEY_LOGIN_TYPE = "login_type"; public static String serverIp = "192.168.0.98"; //; public static String serverPort = "8081";}
还需要增加bg_logo.jpg、icon.png、photo_upload.png等几个图片。
Android拍照上传程序的xml配置文件
1. login_window.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns: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"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dip"android:layout_marginRight="20dip"android:text="@string/user_name"/><EditTextandroid: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"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dip"android:layout_marginRight="20dip"android:text="@string/user_passwd" /><EditText android: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" /><CheckBox android: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" /><RelativeLayout android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><Button android: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" /><Button android: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
<?xml version="1.0" encoding="utf-8"?><GridView xmlns: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
<?xml version="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"> <ImageViewandroid:layout_height="wrap_content"android:id="@+id/ItemImage"android:layout_width="wrap_content"android:layout_centerHorizontal="true"> </ImageView> <TextViewandroid: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
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dip"android:layout_marginRight="20dip"android:text="@string/server_ip"/><EditTextandroid: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"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dip"android:layout_marginRight="20dip"android:text="@string/server_port" /><EditText android: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" /><RelativeLayout android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><Button android: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" /><Button android: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
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.hemi.rhet" android:versionCode="1" android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:label="@string/app_name" android:name="LoginWindow"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="FuncSelector"></activity><activity android:name="PhotoUpload"></activity><activity android:name="ConfigWindow"></activity></application><uses-sdk android:minSdkVersion="5"/><uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission></manifest>
Android拍照上传程序的Servlet程序样例
UploadFileServlet.java:
package com.hemi.rhet.servlet;import java.io.*;import java.net.InetAddress;import java.net.UnknownHostException;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;//import org.apache.commons.fileupload.*;//import org.apache.commons.fileupload.disk.DiskFileItemFactory;//import org.apache.commons.fileupload.servlet.ServletFileUpload;//import org.apache.commons.lang.time.DateUtils;import org.apache.log4j.Logger;//import org.apache.struts2.ServletActionContext;public class UploadFileServlet extends HttpServlet{ private static Logger log = Logger.getLogger(UploadFileServlet.class); private static final String OBLIQUE_LINE = "/"; private static final String OPPOSITE_OBLIQUE_LINE = "////"; private static final String WEBPOSITION = "webapps"; private static final String SBPATH = "UploadedFiles/"; File outdir = null; File outfile = null; FileOutputStream fos = null; BufferedInputStream bis = null; byte[] bs = new byte[1024]; String uploadFName = null; String orderNo = null; String userId = null; String attachType = "2"; public void init() throws ServletException {//if (log.isDebugEnabled())//{// log.debug("进入init()方法!!");//} } public void doGet(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException {doPost(request, response); } public void doPost(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException {String root = this.getServletContext().getRealPath("/");root = root.replaceAll("////", "/");try{ StringBuffer destFName = new StringBuffer(); destFName.append(getRealDir(root)).append(SBPATH); outdir = new File(destFName.toString()); request.setCharacterEncoding("UTF-8"); uploadFName = request.getParameter("filename"); //name of uploaded file uploadFName = request.getHeader("filename"); if (isEmpty(uploadFName)) uploadFName = "filename.jpg"; //orderNo = request.getParameter("orderno");//id of the order or work sheet //userId = request.getParameter("userid");//id of the user who upload the file //attachType = request.getParameter("attach_type"); //type of attachment, refer to file.FileBean"s definition String desc = request.getParameter("desc");//description of uploaded file if (desc==null) desc = ""; if (true) { destFName.append(getDatedFName(uploadFName));outfile = new File(destFName.toString());bis = new BufferedInputStream(request.getInputStream());uploadFile();//response.getWriter().write("0"); //successresponse.setHeader("resultcode", "0"); } else if (desc.length() > 400/2) { //response.getWriter().write("3"); //illegal description response.setHeader("resultcode", "3"); } else {if (log.isDebugEnabled()){ log.debug("调用格式错误!");}response.sendError(100, "参数错误!");//response.getWriter().write("1");response.setHeader("resultcode", "1"); //parameter error//return; }} catch (SQLException e) {if (log.isDebugEnabled()) {log.debug(e); }//response.getWriter().write("6"); //failure of insert to databaseresponse.setHeader("resultcode", "6");} catch (Exception e) { 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();} } private void uploadFile() throws IOException {if (log.isDebugEnabled()){ log.debug("outdir:" + outdir.getPath()); log.debug("outfile:" + outfile.getPath());}if (!outdir.exists()) outdir.mkdir();if (!outfile.exists()) outfile.createNewFile();fos = new FileOutputStream(outfile);int i;while ((i = bis.read(bs)) != -1){ fos.write(bs, 0, i);} } public static String getDatedFName(String fname) {StringBuffer result = new StringBuffer();SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");String dateSfx = "_" + df.format(new Date());int idx = 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);}return result.toString();}public static String getUrlFName(String fname, HttpServletRequest request) {String result = "";if (isEmpty(fname)) return result;try {if (fname.startsWith("http://")) {result = fname;} else {//HttpServletRequest request = ServletActionContext.getServletContext().getRgetRequest();//UserAndOrganAndRole user = (UserAndOrganAndRole)request.getSession().getAttribute("user");String ip = request.getServerName();int port = request.getServerPort();result = fname.substring(fname.indexOf(UploadFileServlet.SBPATH));StringBuffer tmpBuff = new StringBuffer();tmpBuff.append("http://").append(ip).append(":").append(port).append(OBLIQUE_LINE).append(result);//Sample: http://localhost:8083/UploadedFiles/IMAGE_067_100222102521.jpgresult = tmpBuff.toString();}} catch (Exception ex) {ex.printStackTrace();}System.out.println("result is: "+result);return result;}public static boolean isEmpty(String str) {return ((str == null) || (str.length() == 0));} /*** Method getRealDir search webapps position** @param despath** @return**/ private String getRealDir(String newFileNameRoot) throws Exception {if (newFileNameRoot == null) throw new Exception("get real dir failed !");int dp = newFileNameRoot.lastIndexOf(OBLIQUE_LINE);if (dp == -1) throw new Exception("invalid path !");int dpbefore = newFileNameRoot.lastIndexOf(OBLIQUE_LINE, dp - 1);if (dpbefore == -1) throw new Exception("invalid path !");String needSubStr = newFileNameRoot.substring(dpbefore + 1, dp);String nextStr = newFileNameRoot.substring(0, dpbefore + 1);if (!needSubStr.trim().equals(WEBPOSITION)) { return getRealDir(nextStr);} else return newFileNameRoot; } public static void main(String[] args) { }}
web.xml:
<?xml version="1.0" encoding="UTF-8"?><web-app version="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/j2eehttp://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程序设计有所帮助。