Android 上传文件到服务器

[android]代码库
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
// http://commons.apache.org/fileupload/
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
view sourceprint?

您可能还喜欢...

发表评论

邮箱地址不会被公开。