Android拍照上传功能示例代码

作者:与时俱进 时间:2022-08-22 07:51:39 

本文实例讲述了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,拍照,上传
0
投稿

猜你喜欢

  • C#多线程系列之任务基础(一)

    2022-12-09 04:48:22
  • springboot-dubbo cannot be cast to问题及解决

    2022-06-27 14:46:51
  • Spring Boot中如何使用Swagger详解

    2023-09-27 18:13:58
  • SpringBoot项目启动时如何读取配置以及初始化资源

    2021-11-19 04:04:11
  • 通过JDK源码学习InputStream详解

    2022-09-10 19:50:29
  • Java环境配置与编译运行详解

    2022-10-02 12:42:24
  • C#检查指定对象是否存在于ArrayList集合中的方法

    2023-07-28 00:45:17
  • Java线程编程中isAlive()和join()的使用详解

    2023-10-29 18:08:07
  • IntelliJ IDEA(2019)安装破解及HelloWorld案例(图文)

    2022-07-01 22:43:39
  • 简单谈谈RxJava和多线程并发

    2023-08-02 00:27:52
  • 使用Feign动态设置header和原理分析

    2021-07-11 10:30:46
  • Java中try、catch的使用方法

    2021-11-08 00:48:12
  • springboot @Async 注解如何实现方法异步

    2023-11-18 18:16:03
  • Java基础之位运算知识总结

    2022-09-10 17:48:43
  • Spring Security实现微信公众号网页授权功能

    2021-07-09 08:28:46
  • Java实现班级管理系统

    2022-05-08 07:29:48
  • 详解Android Activity的启动流程

    2023-07-29 08:06:19
  • C语言中的回调函数实例

    2021-09-27 08:37:12
  • c++难以发现的bug(有趣)

    2022-01-27 17:01:41
  • android利用ContentResolver访问者获取手机短信信息

    2022-02-02 15:02:37
  • asp之家 软件编程 m.aspxhome.com