原java上传文件 以图片为例 纯Servlet实现

在做JAVA EE开发  有许多的上传图片,百度一大推...可真正懂的原理的却很少 故自己以反编译工具查看写出这样的一篇攻略----并非一段完整的流程:

核心类

common-fileload.jar


1.DiskFileItemFactory 

2.ServeltFileUpload (该类有一个静态的判断在前台的form表单中是否以二进制上传的方法 具体方法为)

ServeltFileUpload .isMultipartContent()   该方法返回一个boolean类型的值 当为true时,方可继续向下进行

3.FileItem(上传的基本参数就封装在该类下)

eg:代码片段

//在源码中可以看出DiskFileFactory虽有Factory但却是一个java类 所以直接new出即可

DiskFileItemFactory dfif = new DiskFileFactory();

//构造器中将DiskFileItemFactory实例传入得到servletFileUpload的实例

ServletFileUpload sFileUpload = new ServletFileUpload(dfif );

//运用sFileUpload的parseRequest(HttpServletRequest ) 将request转化成list对象

/*

 这边说明一下因为要将list中的对象转化成FileItem对象,思路不只一个的  这边的做法是将

list的iterator()方法得到Iterator的迭代器 运用该迭代器的next()方法形成Object对象强转成

FileItem对象  当然运用ArrayList循环也可以

感觉最简单的办法的就是先声明一个ArrayList<FileItem> fList = null

                                                                fList  = (ArrayList)sFileUpload .parseRequest(request);

                                                               for( FileItem f : fList ){

                                                                   f.XXXX什么什么的

                                                                    }

*/


 List list = sFileUpload .parseRequest(request);

 Iterator it = list.iterator();

 while(it.hasNext()){

      FileItem fItem = (FileItem)it.next();//fItem核心的实例包含了你上传文件的所有的信息

     if(fTtem.isFormField()){

     }else{

     String uploadFile = fItem.getName();//上传的文件名称例如Xxxx.png

     String uploadFileffix = uploadFile .substring(uploadFile .indexof("."));//获得该文件的后缀 .png

     String upLoadFileServerName = UUID. randomUUID().toString();//运用UUID的randomUUID()方法生成名称

     String uploadFile = fItem.getContentType();//获得上传的文件的类型例如图片啊什么的

     if(uploadFile .equals("image/png")){//这边是类型等于什么什么的格式

/*万事具备即可正式上传文件啦~~~*/

     InputStream in = fItem.getStream();//得到该文件的输入流

     FileOutputStream out = new FileOutputStream(getServletContext().getRealPath("/")+"upload" + upLoadFileServerName  +  uploadFileffix );      

/*

 这边说明一下 

 因为是文件所以用文件输出流

getServletContext().getRealPath("/")这是绝对路径tomcat服务器下的路径

upload 是tomcat webapps 项目下的自己新建的文件夹用来摆放上传后的文件

upLoadFileServerName + uploadFileffix  生成的文件名

*/

int len = 0;

byte [] bytes = new byte[1024];//字节数组存放信息

while((len = in.read(bytes)) > 0){

out.write(bytes , 0 , len);

}

out.close();

in.close();

     }


     }


}


ps : 欢迎加我微信,一起探讨技术, 注明csdn上看见的

           


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值