Java图片上传 + 批量

老规矩还是先上图看效果:

对于上传文件,浏览器在上传的过成中将文件已字节流的形式提交到服务器,小编一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,给出ssm框架pom.xml 配置

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.1</version>
</dependency>

上传页面的代码如下(jsp):

<form action="<%=request.getContextPath()%>/UserController/fileUpload" method="post" enctype="multipart/form-data" id="uploadForm">
    <input type="file" name="images">
    <input  type="file" name="images">
    <button  type="submit"  name="" >上传</button>
</form>

这里使用传统的form 表单提交 值得注意的地方 enctype="multipart/form-data" 必写来表示进行文件上传 如果多图上传input的name 属性一定要相同 

处理文件上传的HttpServlet 工具类

//设置上传保存图片的路径 url是你要保存的图片的路径 
//为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。
String savePaht=url;
File file=new File(savePaht);
//判断上传的目录是否存在
if(!file.exists()){
    //如果不存在则创建
    file.mkdir();
}
//1 创建一个磁盘diskFileItemFactory 工厂
DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
//2 创建一个servletFileUpload 解析器
ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory);
servletFileUpload.setHeaderEncoding("UTF-8");
//3、判断提交上来的数据是否是上传表单的数据
if (ServletFileUpload.isMultipartContent(req)) {
    try{
        //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
        List<FileItem> list=servletFileUpload.parseRequest(req);
        for(FileItem item:list){
            if(item.isFormField()){
                //如果fileitem中封装的是普通输入项的数据
            }else{
                //如果fileitem中封装的是上传文件
                //得到上传的文件名
                String fileName=item.getName();
                if(fileName!=null || !"".equals(fileName)){
                    //验证上传的图片后缀 是不是以 (jpg,png,jpeg)结尾的
                    if(fileName.substring(fileName.lastIndexOf(".")+1).equals("jpg") ||
                            fileName.substring(fileName.lastIndexOf(".")+1).equals("png")||
                            fileName.substring(fileName.lastIndexOf(".")+1).equals("jpeg")){

                        fileName=fileName.substring(fileName.lastIndexOf("."));
                        //赋予新名字 采用的是时间戳(防止有重名的文件保证唯一性 如果不采用时间戳可以采用UUID)
                        //如果不赋予新的名字 上传的图片有重复 会自动覆盖
                        String newfileName=new Date().getTime()+fileName;
                        //获取item中的上传文件的输入流
                        InputStream in=item.getInputStream();
                        //把图片输出到指定的文件中
                        FileOutputStream out=new FileOutputStream(savePaht + "\\" + newfileName);
                        //创建一个缓冲区
                        byte bytes[]=new byte[1024];
                        //验证输入流中的数据是否读完
                        int len=0;
                        while((len=in.read(bytes))>0){
                             //使用FileOutputStream 输出到指定文件中
                            out.write(bytes,0,len);
                        }
                        System.out.println("上传成功!");
                    
                        //关闭输入流
                        in.close();
                        //关闭输出流
                        out.close();
                        //删除处理文件上传时生成的临时文件
                        item.delete();
                    }else{
                        //必须是图片
                   
                    }
                }else{
                    //如果图片文件名为空
                  
                }
            }
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}else{
    //如果不是使用表单提交数据
   
}

到这里就告一段落 其实很简单  多写多练 自认而然就得心应手 当然还有很多其他的方法

后面会继续跟新下载,excl导入,导出 等。。。。

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值