java中设置文件上传

第一步:创建UploadUtils 工具类

import java.util.UUID;

public class UploadUtils {

    //截取真实文件名
    public static String subFileName(String fileName){
        
        //查找最后一个 \出现位置
        int index = fileName.lastIndexOf("\\");
        if(index==-1){
            return fileName;
        }
        return fileName.substring(index+1);
    }
    
    // 获得随机UUID文件名
    public static String generateRandomFileName(String fileName){
        //获得扩展名
        String ext = fileName.substring(fileName.lastIndexOf("."));
        return UUID.randomUUID().toString() + ext;
    }
    
    // 获得hashcode生成二级目录
    public static String generateRandomDir(String uuidFileName){
        int hashCode = uuidFileName.hashCode();
        System.out.println(hashCode+"||"+hashCode);
        //一级目录
        int d1 = hashCode & 0xf;
        //二级目录
        int d2 = (hashCode >> 4) & 0xf;
        return "/"+d1+"/"+d2;
    }
    public static void main(String[] args) {
        System.out.println(generateRandomFileName("aaaaa.jpg"));
        System.out.println(subFileName("c:\\as\\td\\gg\\adfsf.jpg"));
        System.out.println(generateRandomDir("bfc28931-e2d8-4d32-a061-85055e4a19b6.jpg"));
    }
}

 

 第二步:在servlet中配置

    //添加商品
    public void addProduct(HttpServletRequest request,HttpServletResponse response) throws IOException {
        // TODO Auto-generated method stub
        // 1.封装数据到javaBean--先将数据封装到map集合中.
        Map<String, String[]> map = new HashMap<String,String[]>();
        
        // 2.创建DiskFileItemFactory
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(1024*1024*5); // 设置缓存区大小为5m
        factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));//设置临时文件存储位置
        
        // 3.创建ServletFileUpload
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        // 判断是否是上传操作
        if(upload.isMultipartContent(request)){
            upload.setHeaderEncoding("utf-8");
            
            // 4.得到所有的FileItem
            try {
                List<FileItem> items = upload.parseRequest(new ServletRequestContext(request));
                // 5.遍历items
                for (FileItem item : items) {
                    // 判断是否是上传项
                    if(item.isFormField()){
                        String fieldName = item.getFieldName();
                        String value = item.getString("utf-8");
                        map.put(fieldName, new String[]{value});//封装非上传项组件信息到map
                    }else{
                        //是上传组件
                        String fileName = item.getName();//得到上传文件
                        // c:/a/a.txt a.txt
                        //得到真实名称
                        fileName  = UploadUtils.subFileName(fileName);
                        
                        //得到随机名称
                        String uuidFileName = UploadUtils.generateRandomFileName(fileName);
                        
                        // 得到随机目录
                        String randomDir = UploadUtils.generateRandomDir(uuidFileName);
                        
                        String path = this.getServletContext().getRealPath("/upload"+ randomDir);
                        System.out.println("path:"+path);
                        File pathFile = new File(path);
                        
                        if(!pathFile.exists()){
                            System.out.println("我上传文件了");
                            pathFile.mkdirs();
                        }
                        
                        //得到一个imgurl
                        String imgurl = "/upload"+randomDir+"/"+uuidFileName;
                        
                        map.put("imgurl", new String[]{imgurl});
                        
                        try {
                            item.write(new File(pathFile,uuidFileName));
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    
                }
                
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            
            //封装商品的id
            map.put("id",new String[]{UUID.randomUUID().toString()});
            Product product = new Product();
            
            try {
                BeanUtils.populate(product, map);
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println("图片路径:"+product.getImgurl());
            //做一个功能:得到商品的缩略图
            PicUtils putils = new PicUtils(this.getServletContext().getRealPath(product.getImgurl()));
        
            putils.resize(200, 200);
            
            //调用ProductService中的添加商品方法
            
            ProductService service = ProductServiceFactory.getInstance();
            
            try {
                User user = (User) request.getSession().getAttribute("user");
                service.add(user, product);
                response.sendRedirect(request.getContextPath()+"/index.jsp");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (PrivilegeException e) {
                e.printStackTrace();
                response.sendRedirect(request.getContextPath()
                        + "/error/error.jsp");
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            
            
            
            
        }
    }

 

posted @ 2016-11-18 20:44  CZ-伊甸园  阅读(332)  评论(0)    收藏  举报