WEB-Android两种方式实现文件上传


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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值