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(); } } }

浙公网安备 33010602011771号