教授通过代码示例学习Commons HTTPClient4组件的编程技术——实现文件上传和下载

httpclient4  时间:2021-01-29  阅读:()

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

目录

1.1 实现文件上传和下载. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.1 完善客户端文件下载相关的程序功能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.2 通过HT TP实现文件上传功能——M ult ip artEnt ity类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5

1.1.3 应用Mult ip art Ent ity实现文件上传. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

杨教授工作室版权所有盗版必究 1/16页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1 实现文件上传和下载

1. 1. 1完善客户端文件下载相关的程序功能

1、在客户端项目中添加一个DownLoadIma ge类

1类名称为DownLoadImage包名称为co m.p x1987.httpc lient

2编程DownLoadImage程序代码package com.px1987.httpclient;import java. io.FileOutputStream;import java. io. IOException;import java. io. InputStream;import org.apache.http.HttpEntity;

杨教授工作室精心创作的优秀程序员职业提升必读系列资料import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http. impl.client.DefaultHttpClient;public class DownLoadImage {public DownLoadImage() throws ClientProtocolException, IOException {

//创建一个客户端类似打开一个浏览器

HttpClient httpClient = new DefaultHttpClient() ;

String targetFileURL="http://127.0.0. 1 :8080/webbank/images/logo. jpg";

HttpGet oneGetMethod = new HttpGet(targetFileURL) ;

HttpResponse httpResponse =httpClient. execute(oneGetMethod) ;int httpStatusCode=httpResponse.getStatusLine() .getStatusCode() ;if(httpStatusCode==HttpStatus.SC_OK) {

System.out.println(httpResponse.getStatusLine() ) ;//打印服务器返回的状态

HttpEntity entity = httpResponse.getEntity() ;if (entity != null) {

//这里可以得到文件的类型如image/jpg /zip /tiff等

System.out.println(entity.getContentType() ) ;

//可以判断是否是文件数据流

System.out.println(entity. isStreaming() ) ;downLoadSomeOneFile(entity) ;

}entity.consumeContent() ; //确保资源释放

}else{

System.out.println("方法执行过程中出现了错误") ;//打印服务器返回的状态

杨教授工作室版权所有盗版必究 3/16页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

}oneGetMethod.abort() ; //结束本次请求httpClient.getConnectionManager() . shutdown() ; ;//释放连接

}public void downLoadSomeOneFile(HttpEntity entity ) throws IOException{

InputStream oneInputStream = entity.getContent() ;

String outputTargetFileName="logo. jpg";

FileOutputStream oneFileOutputStream = newFileOutputStream(outputTargetFileName) ;byte[] buffer= new byte[4096] ;int length = -1 ;while ( (length = oneInputStream.read(buffer) ) != -1) {oneFileOutputStream.write(buffer, 0, length) ;

}oneFileOutputStream.close() ;oneInputStream.close() ;

}public static void main(String[] args) throws ClientProtocolException,IOException {

DownLoadImage oneWebBankAppclient=new DownLoadImage() ;

}

}

2、执行后的结果

首先启动服务器、并正确地部署Web应用系统后并保证在Web系统的目录中存在有一个图片文件

杨教授工作室版权所有盗版必究 4/16页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

再执行DownLoadImage后的结果

1. 1.2通过HTTP实现文件上传功能——MultipartEntity类

1、Mult ip art E nt ity类的主要功能

HttpC lie nt4组件使用了单独的一个Multip artEntity类包装处理上传的文件Mult ip art E nt ity表示由多个独立的数据类型实体组成的数据。

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

2、在Web服务器端项目中添加与文件上传功能实现有关的系统库

1 Commons-F ileUp load组件的系统库文件commons-fileup load-1.2.1.jar

2实现IO功能的commons-io.j ar 它其实是Commons IO组件的一个系统库文件

它是对Java IO库的功能扩展组件简化和扩展Java IO编程然后再将这两个系统库文件添加到项目的classpath环境变量中对于Web应用系统而言 同样也还是放在WEB-INF/lib目录中。

1. 1.3应用MultipartEntity实现文件上传

1、在项目中添加一个处理文件上传的Servlet

1类名称为UpLo adF ileServlet包名称为com.px1987.httpclient.servlet

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

2 URL-Pattern设置为/upLoadFileServlet

3编程该Servletpackage com.px1987.httpclient. servlet;import java. io.File;import java. io. IOException;

杨教授工作室精心创作的优秀程序员职业提升必读系列资料import java. io.PrintWriter;import java.util.HashMap;import java.util. Iterator;import java.util.List;import java.util.Map;import javax. servlet.RequestDispatcher;import javax. servlet.ServletException;import javax. servlet.http.HttpServlet;import javax. servlet.http.HttpServletRequest;import javax. servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload. servlet.ServletFileUpload;public class UpLoadFileServlet extends HttpServlet {private static final long serialVersionUID = 1L;public UpLoadFileServlet() {super() ;

}public void destroy() {super.destroy() ;

}private static final String upLoadFileSavedDirectoryInServerDisk="/upload/";String upLoadFilePathInServerDisk =null;public void doPost (HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {doUpLoadFile(request,response) ;

}public void doUpLoadFile(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException{

杨教授工作室版权所有盗版必究 8/16页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料upLoadFilePathInServerDisk =this.getServletContext() .getRealPath(upLoadFileSavedDirectoryInServerDisk) ;

List<FileItem> upLoadFileFormItems=null;try {upLoadFileFormItems=getAllItemInUpLoadForm(request) ;

} catch (FileUploadException e1) {e1.printStackTrace() ;

}

Map<String,FileItem> allItemsInRegisterFormHashMap=getAllItemInUpLoadForm(request,upLoadFileFormItems) ;

String headImageFileDescript=

( (FileItem)allItemsInRegisterFormHashMap.get("headImageFileDescript") ) .getString() ;

FileItem headImageFile=

(FileItem)allItemsInRegisterFormHashMap.get("headImageFile") ;

String upLoadFileNameAndPath = headImageFile.getName() ;if (upLoadFileNameAndPath == null | |upLoadFileNameAndPath. trim() . length() == 0) {request. setAttribute("errorText", "请选择需要上传的文件然后再继续进行上传操作 ") ;forwardTargetPage("/index. jsp",request,response) ;return;

}

String upLoadFileName=upLoadFileNameAndPath. substring(upLoadFileNameAndPath. lastIndexOf(File. separator) + 1) ;

String upLoadFileExtendName =

杨教授工作室版权所有盗版必究 9/16页

易探云:香港物理机服务器仅550元/月起;E3-1230/16G DDR3/SATA 1TB/香港BGP/20Mbps

易探云怎么样?易探云(yitanyun.com)是一家知名云计算品牌,2017年成立,从业4年之久,目前主要从事出售香港VPS、香港独立服务器、香港站群服务器等,在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。目前,易探云推出免备案香港物理机服务器性价比很高,E3-1230 8 核*1/16G DDR3/SATA 1TB/香港BGP线路/20Mbps/不限流量,仅...

木木云35元/月,美国vps服务器优惠,1核1G/500M带宽/1T硬盘/4T流量

木木云怎么样?木木云品牌成立于18年,此为贵州木木云科技有限公司旗下新运营高端的服务器的平台,目前已上线美国中部大盘鸡,母鸡采用E5-267X系列,硬盘全部组成阵列。目前,木木云美国vps进行了优惠促销,1核1G/500M带宽/1T硬盘/4T流量,仅35元/月。点击进入:木木云官方网站地址木木云优惠码:提供了一个您专用的优惠码: yuntue目前我们有如下产品套餐:DV型 1H 1G 500M带宽...

阿里云服务器绑定域名的几个流程整理

今天遇到一个网友,他之前一直在用阿里云虚拟主机,我们知道虚拟主机绑定域名是直接在面板上绑定的。这里由于他的网站项目流量比较大,虚拟主机是不够的,而且我看他虚拟主机已经有升级过。这里要说的是,用过阿里云虚拟主机的朋友可能会比较一下价格,实际上虚拟主机价格比云服务器还贵。所以,基于成本和性能的考虑,建议他选择云服务器。毕竟他的备案都接入在阿里云。这里在选择阿里云服务器后,他就蒙圈不知道如何绑定域名。这...

httpclient4为你推荐
2g内存价格同是2G内存价格差别那么大登陆qq空间首页手机怎么没法登陆QQ空间首页了?音乐播放器哪个好音乐播放器哪个好用二手车网站哪个好二手车网站哪家好?哪个信息更可靠?苹果手机助手哪个好苹果手机助手哪个好,苹果手机助手推荐?电陶炉和电磁炉哪个好电磁炉跟电陶炉哪个好尼康和佳能单反哪个好佳能和尼康哪个好海克斯皮肤哪个好摄魂使者薇恩和海克斯安妮皮肤哪个好 怎么合成oppo和vivo哪个好Vivo和OPPO哪个好点啊?qq空间登录不上qq空间登不上去
天津虚拟主机 百度云100as 搬瓦工官网 gomezpeer 42u机柜尺寸 12306抢票助手 免空 腾讯云分析 服务器托管什么意思 最好的qq空间 息壤代理 上海服务器 电信托管 吉林铁通 空间登入 免费asp空间 主机管理系统 免费网络空间 网络速度 汤博乐 更多