Android客户端
package com.example.testandroid;
|
import java.io.DataOutputStream;
|
import java.io.FileInputStream;
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import android.app.Activity;
|
import android.app.AlertDialog;
|
import android.content.DialogInterface;
|
import android.os.Bundle;
|
import android.view.View;
|
import android.widget.Button;
|
import android.widget.TextView;
|
public class PhotoUpload extends Activity {
|
private String newName = "image.jpg";
|
private String uploadFile = "/sdcard/image.JPG";// 要上传的文件
|
private String actionUrl = "http://192.168.0.1:8080/PhotoUpload/servlet/UploadServlet";
|
private TextView mText1;
|
private TextView mText2;
|
private Button mButton;
|
@Override
|
public void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_main);
|
mText1 = (TextView) findViewById(R.id.myText2);
|
// 文件路径:
|
mText1.setText(uploadFile);
|
mText2 = (TextView) findViewById(R.id.myText3);
|
// 上传网址:
|
mText2.setText(actionUrl);
|
/* 设置mButton的onClick事件处理 */
|
mButton = (Button) findViewById(R.id.myButton);
|
mButton.setOnClickListener(new View.OnClickListener() {
|
public void onClick(View v) {
|
uploadFile();
|
}
|
});
|
}
|
/* 上传文件至Server的方法 */
|
private void uploadFile() {
|
String end = "\r\n";
|
String twoHyphens = "--";
|
String boundary = "*****";
|
try {
|
URL url = new URL(actionUrl);
|
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
/* 允许Input、Output,不使用Cache */
|
con.setDoInput(true);
|
con.setDoOutput(true);
|
con.setUseCaches(false);
|
// 设置http连接属性
|
con.setRequestMethod("POST");
|
con.setRequestProperty("Connection", "Keep-Alive");
|
con.setRequestProperty("Charset", "UTF-8");
|
con.setRequestProperty("Content-Type",
|
"multipart/form-data;boundary=" + boundary);
|
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
|
ds.writeBytes(twoHyphens + boundary + end);
|
ds.writeBytes("Content-Disposition: form-data; "
|
+ "name=\"file1\";filename=\"" + newName + "\"" + end);
|
ds.writeBytes(end);
|
// 取得文件的FileInputStream
|
FileInputStream fStream = new FileInputStream(uploadFile);
|
/* 设置每次写入1024bytes */
|
int bufferSize = 1024;
|
byte[] buffer = new byte[bufferSize];
|
int length = -1;
|
/* 从文件读取数据至缓冲区 */
|
while ((length = fStream.read(buffer)) != -1) {
|
/* 将资料写入DataOutputStream中 */
|
ds.write(buffer, 0, length);
|
}
|
ds.writeBytes(end);
|
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
|
fStream.close();
|
ds.flush();
|
/* 取得Response内容 */
|
InputStream is = con.getInputStream();
|
int ch;
|
StringBuffer b = new StringBuffer();
|
while ((ch = is.read()) != -1) {
|
b.append((char) ch);
|
}
|
/* 将Response显示于Dialog */
|
showDialog("上传成功" + b.toString().trim());
|
/* 关闭DataOutputStream */
|
ds.close();
|
} catch (Exception e) {
|
showDialog("上传失败" + e);
|
}
|
}
|
/* 显示Dialog的method */
|
private void showDialog(String mess) {
|
new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
|
.setMessage(mess)
|
.setNegativeButton("确定", new DialogInterface.OnClickListener() {
|
public void onClick(DialogInterface dialog, int which) {
|
}
|
}).show();
|
}
|
} |
服务器端servlet
package com.demo;
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.Date;
|
import java.util.Iterator;
|
import java.util.List;
|
import javax.servlet.ServletException;
|
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import org.apache.commons.fileupload.DiskFileUpload;
|
import org.apache.commons.fileupload.FileItem;
|
public class UploadServlet extends HttpServlet {
|
public void doPost(HttpServletRequest request, HttpServletResponse response)
|
throws ServletException, IOException {
|
String temp = request.getSession().getServletContext().getRealPath("/")
|
+ "temp"; // 临时目录
|
System.out.println("temp=" + temp);
|
String loadpath = request.getSession().getServletContext()
|
.getRealPath("/")
|
+ "Image"; // 上传文件存放目录
|
System.out.println("loadpath=" + loadpath);
|
DiskFileUpload fu = new DiskFileUpload(); // 需要导入commons-fileupload-1.2.2.jar
|
fu.setSizeMax(1 * 1024 * 1024); // 设置允许用户上传文件大小,单位:字节
|
fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节
|
fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
|
// 开始读取上传信息
|
int index = 0;
|
List fileItems = null;
|
try {
|
fileItems = fu.parseRequest(request);
|
System.out.println("fileItems=" + fileItems);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
|
while (iter.hasNext()) {
|
FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息
|
if (!item.isFormField()) {
|
String name = item.getName();// 获取上传文件名,包括路径
|
name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名
|
long size = item.getSize();
|
if ((name == null || name.equals("")) && size == 0)
|
continue;
|
int point = name.indexOf(".");
|
name = (new Date()).getTime()
|
+ name.substring(point, name.length()) + index;
|
index++;
|
File fNew = new File(loadpath, name);
|
try {
|
item.write(fNew);
|
} catch (Exception e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
} else// 取出不是文件域的所有表单信息
|
{
|
String fieldvalue = item.getString();
|
// 如果包含中文应写为:(转为UTF-8编码)
|
// String fieldvalue = new
|
// String(item.getString().getBytes(),"UTF-8");
|
}
|
}
|
String text1 = "11";
|
response.sendRedirect("result.jsp?text1=" + text1);
|
}
|
} |
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:tools="http://schemas.android.com/tools"
|
android:layout_width="match_parent"
|
android:layout_height="match_parent" >
|
<EditText
|
android:id="@+id/myText2"
|
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
android:layout_alignParentTop="true"
|
android:layout_centerHorizontal="true"
|
android:layout_marginTop="116dp"
|
android:ems="10"
|
android:inputType="textPersonName" />
|
<EditText
|
android:id="@+id/myText3"
|
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
android:layout_alignLeft="@+id/myText2"
|
android:layout_below="@+id/myText2"
|
android:layout_marginTop="45dp"
|
android:ems="10" />
|
<Button
|
android:id="@+id/myButton"
|
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
android:layout_below="@+id/myText3"
|
android:layout_centerHorizontal="true"
|
android:layout_marginTop="61dp"
|
android:text="上传" />
|
</RelativeLayout>
|