Android写真アップロード機能例コード
この例は、Androidが写真のアップロード機能を実現する方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
1、Login Window.java――登録窓口
Android写真アップロードプログラムのxml設定ファイル
1.login_window.xml
UploadFileServlet.java:
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。
1、Login Window.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.機能モジュール選択ウィンドウ
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_uplload.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.Android Manifest.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プログラムの設計に役に立ちます。