首页 > 系统 > Android > 正文

Android拍照上传功能示例代码

2019-12-12 05:43:06
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表