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);
}
}

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. 用shell脚本生成.x509.pem 和.pk8 文件并签名
  6. Android(安卓)JNI入门实例(Windows+Cygwin+Eclipse)
  7. Android(安卓)Media Scanner工作流程及原理
  8. Linux 安装android
  9. Ubuntu的jdk和Eclipse的Android环境安装

随机推荐

  1. android adb命令
  2. 在本地UI使用webview,在html页面用js与and
  3. 14天学会安卓开发(第十三天)Android多媒
  4. android开发新浪微博客户端 完整攻略 [新
  5. Android(安卓)Camera应用初探一
  6. 64位Ubuntu配置android环境报错(...adb":
  7. HandlerThread的使用
  8. Android开发之新建项目
  9. Android(安卓)EditView用法小结
  10. 2011.09.13(3)——— android 添加快捷方式