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 { @Override public 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); // 添加图像资源的ID map.put("ItemText", getString(R.string.photo_upload)); // 按序号做ItemText lstImageItem.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); // 添加图像资源的ID map.put("ItemText", "NO." + String.valueOf(i)); // 按序号做ItemText lstImageItem.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 ID new 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 happened View arg1,// The view within the AdapterView that was clicked int arg2,// The position of the view in the adapter long arg3// The row id of the item that was clicked ) { // 在本例中arg2=arg3 HashMap<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 { @Override public void onCreate(Bundle savedInstanceState) { Log.i("info", "enter LoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.func_selector); } @Override protected 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 card ByteArrayOutputStream 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 manifest FileOutputStream 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 URL conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(120000); // Allow Inputs conn.setDoInput(true); // Allow Outputs conn.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 http FileInputStream fileInputStream = new FileInputStream(photoPath); // create a buffer of maximum size int 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 streams Log.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); //hemerr mServerIP.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" /> <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" /> <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"> <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
<?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" /> <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" /> <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"); //success response.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 database response.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.jpg result = 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/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程序设计有所帮助。
赞 (0)