您的位置:首页 > 移动开发 > Android开发

Android拍照上传代码样例

2013-03-25 22:46 501 查看

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: