本实例实现了android上传手机图片至服务器,服务器进行保存
服务器servlet代码
android客户端代码
原文出自:http://www.cnblogs.com/gzggyy/archive/2011/08/02/2125237.html
服务器servlet代码
- publicvoid
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(); -
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); -
}
publicvoid 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(); 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); }
android客户端代码
- public
class PhotoUpload extends Activity { -
private String newName ="image.jpg"; -
private String uploadFile ="/sdcard/image.JPG"; -
private String actionUrl ="http://192.168.0.71:8086/HelloWord/myForm"; -
private TextView mText1; -
private TextView mText2; -
private Button mButton; -
@Override -
publicvoid onCreate(Bundle savedInstanceState) -
{ -
super.onCreate(savedInstanceState); -
setContentView(R.layout.photo_upload); -
mText1 = (TextView) findViewById(R.id.myText2); -
//"文件路径:\n"+ -
mText1.setText(uploadFile); -
mText2 = (TextView) findViewById(R.id.myText3); -
//"上传网址:\n"+ -
mText2.setText(actionUrl); -
-
mButton = (Button) findViewById(R.id.myButton); -
mButton.setOnClickListener(new View.OnClickListener() -
{ -
publicvoid onClick(View v) -
{ -
uploadFile(); -
} -
}); -
} -
-
privatevoid uploadFile() -
{ -
String end ="\r\n"; -
String twoHyphens ="--"; -
String boundary ="*****"; -
try -
{ -
URL url =new URL(actionUrl); -
HttpURLConnection con=(HttpURLConnection)url.openConnection(); -
-
con.setDoInput(true); -
con.setDoOutput(true); -
con.setUseCaches(false); -
-
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 fStream =new FileInputStream(uploadFile); -
-
int bufferSize =1024; -
byte[] buffer =newbyte[bufferSize]; -
int length =-1; -
-
while((length = fStream.read(buffer)) !=-1) -
{ -
-
ds.write(buffer, 0, length); -
} -
ds.writeBytes(end); -
ds.writeBytes(twoHyphens + boundary + twoHyphens + end); -
-
fStream.close(); -
ds.flush(); -
-
InputStream is = con.getInputStream(); -
int ch; -
StringBuffer b =new StringBuffer(); -
while( ( ch = is.read() ) !=-1 ) -
{ -
b.append( (char)ch ); -
} -
-
showDialog("上传成功"+b.toString().trim()); -
-
ds.close(); -
} -
catch(Exception e) -
{ -
showDialog("上传失败"+e); -
} -
} -
-
privatevoid showDialog(String mess) -
{ -
new AlertDialog.Builder(PhotoUpload.this).setTitle("Message") -
.setMessage(mess) -
.setNegativeButton("确定",new DialogInterface.OnClickListener() -
{ -
publicvoid onClick(DialogInterface dialog, int which) -
{ -
} -
}) -
.show(); -
} -
}
public class PhotoUpload extends Activity { private String newName ="image.jpg"; private String uploadFile ="/sdcard/image.JPG"; private String actionUrl ="http://192.168.0.71:8086/HelloWord/myForm"; private TextView mText1; private TextView mText2; private Button mButton; @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photo_upload); mText1 = (TextView) findViewById(R.id.myText2); //"文件路径:\n"+ mText1.setText(uploadFile); mText2 = (TextView) findViewById(R.id.myText3); //"上传网址:\n"+ mText2.setText(actionUrl); mButton = (Button) findViewById(R.id.myButton); mButton.setOnClickListener(new View.OnClickListener() { publicvoid onClick(View v) { uploadFile(); } }); } privatevoid uploadFile() { String end ="\r\n"; String twoHyphens ="--"; String boundary ="*****"; try { URL url =new URL(actionUrl); HttpURLConnection con=(HttpURLConnection)url.openConnection(); con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); 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 fStream =new FileInputStream(uploadFile); int bufferSize =1024; byte[] buffer =newbyte[bufferSize]; int length =-1; while((length = fStream.read(buffer)) !=-1) { ds.write(buffer, 0, length); } ds.writeBytes(end); ds.writeBytes(twoHyphens + boundary + twoHyphens + end); fStream.close(); ds.flush(); InputStream is = con.getInputStream(); int ch; StringBuffer b =new StringBuffer(); while( ( ch = is.read() ) !=-1 ) { b.append( (char)ch ); } showDialog("上传成功"+b.toString().trim()); ds.close(); } catch(Exception e) { showDialog("上传失败"+e); } } privatevoid showDialog(String mess) { new AlertDialog.Builder(PhotoUpload.this).setTitle("Message") .setMessage(mess) .setNegativeButton("确定",new DialogInterface.OnClickListener() { publicvoid onClick(DialogInterface dialog, int which) { } }) .show(); } }
原文出自:http://www.cnblogs.com/gzggyy/archive/2011/08/02/2125237.html