1、客户端上传文件
WEB网页实现文件上传。
主要有一条:设置enctype="multipart/form-data">
Android实现文件上传。
1、获取输入框中输入的手机上文件的路径.
String filePath = et_file_path.getText().toString().trim();
2、创建文件,并判断文件路径是否存在.
File file = new File(filePath);
if(!file.exists()){
Toast.makeText(this,"文件不存在",0).show();
return;
}
3、准备好浏览器
HttpClient client = new DefaultHttpClient();
4、准备好要上传的文件-Part数组(可以支持多文件上传)和地址栏PostMethod
Part [] parts = {new FilePart("file",file)};
PostMethod postMethod = new PostMethod("http://192.168.1.10/login/LoginServlet");
//这里的上传地址可以通过xml资源的形式配置:
//String servlerurl = getResources().getString(R.String.serverurl);
5、将数据放到地址栏中,并设置为enctype = multipart
postMethod.setRequestEntity(new MultipartRequestEntity(parts,postMethod.getParams()));
6、点击上传按钮,执行上传方法,得到响应码
int code = client.executeMethod(postMethod);
7、判断响应码并给出响应消息
if (status == 200) {
Toast.makeText(this, "上传文件成功", 0).show();
} else {
Toast.makeText(this, "上传文件失败", 0).show();
}
2、客户端接收文件上传。用到了apache的FileUpload组件。需要导入的jar包:
commons-fileupload-***.jar
commons-io-***.jar
1、判断是不是满足:enctype="multipart/form-data",如果不是就得不到上传的文件。
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
2、得到处理上传内容的对象ServletFileUpload
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
3、设置编码
upload.setHeaderEncoding("utf-8");
4、运用upload对象解析request请求,得到表单里的元素item
List<FileItem> items = upload.parseRequest(request);
5、循环遍历,如果是普通元素就打印,如果是文件就用item.write()写入到服务器的文件中
for(FileItem item:items){
if(item.isFormField()){
String name1 = item.getFieldName();//得到请求参数的名称
String value = item.getString("UTF-8");//得到参数值
System.out.println(name1+ "="+ value);
}else{
item.write(new File(dir,filename));
}
}
<!#####################################################################################################!>
Android客户端代码:
public void uploadFile(View view) {
String filepath = et_file_path.getText().toString().trim();
File file = new File(filepath);
if (!file.exists()) {
Toast.makeText(this, "文件不存在", 0).show();
return;
}
PostMethod filePost = null;
try {
Part[] parts = { new FilePart("file", file) };
filePost = new PostMethod(getResources().getString(
R.string.serverurl));
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
int status = client.executeMethod(filePost);
if (status == 200) {
Toast.makeText(this, "上传文件成功", 0).show();
} else {
Toast.makeText(this, "上传文件失败", 0).show();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "服务器异常", 0).show();
} finally {
filePost.releaseConnection();
}
}
服务器端Servlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
String realpath = request.getSession().getServletContext().getRealPath("/files");
System.out.println(realpath);
File dir = new File(realpath);
if(!dir.exists()) dir.mkdirs();
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try {
List<FileItem> items = upload.parseRequest(request);
for(FileItem item : items){
if(item.isFormField()){
String name1 = item.getFieldName();//得到请求参数的名称
String value = item.getString("UTF-8");//得到参数值
System.out.println(name1+ "="+ value);
}else{
item.write(new File(dir, System.currentTimeMillis()+ item.getName().substring(item.getName().lastIndexOf ("."))));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}else{
doGet(request, response);
}
}