javaweb图片和图片名上传代码及详解

	// 上传图片及图片调用add方法
	public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
		//用来接收上传图片的名字
		Map<String,String> params = new HashMap<>();
		//用来接收上传的图片调用下面的parseUpload方法
		InputStream is = super.parseUpload(request, params);
		
		//从HashMap中得到图片名
		String name= params.get("name");
		//实例化上传对象
		Category c = new Category();
		c.setName(name);
		categoryDAO.add(c);
		
		//获取存储图片路径
		File  imageFolder= new File(request.getSession().getServletContext().getRealPath("img/category"));
		//建立文件虚拟路径
		File file = new File(imageFolder,c.getId()+".jpg");
		
		try {
			if(null!=is && 0!=is.available()){
			    try(FileOutputStream fos = new FileOutputStream(file)){
			        byte b[] = new byte[1024 * 1024];
			        int length = 0;
			        while (-1 != (length = is.read(b))) {
			            fos.write(b, 0, length);
			        }
			        fos.flush();
			        //通过如下代码,把文件保存为jpg格式,这段代码可以复制粘贴不需要理解
			        BufferedImage img = ImageUtil.change2jpg(file);
			        ImageIO.write(img, "jpg", file);		
			    }
			    catch(Exception e){
			    	e.printStackTrace();
			    }
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		return "@admin_category_list";
	}


	public InputStream parseUpload(HttpServletRequest request, Map<String, String> params) {
             InputStream is =null;
             使用Apache文件上传组件处理文件上传步骤:
             try {
             	 //创建一个DiskFileItemFactory工厂
                 DiskFileItemFactory factory = new DiskFileItemFactory();
                 //创建一个文件上传解析器
                 ServletFileUpload upload = new ServletFileUpload(factory);
                 // 设置上传文件的大小限制为10M,当上传的文件大小超过缓冲区的大小时,就会
                 //生成一个临时文件存放到指定的临时目录当中。
                 factory.setSizeThreshold(1024 * 10240);
                 //使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合,每一个
                 //list存储的对象对应一个Form表单的输入项
                 List items = upload.parseRequest(request);
                 //使用迭代器遍历list
                 Iterator iter = items.iterator();
                 while (iter.hasNext()) {
                     FileItem item = (FileItem) iter.next();
                   //判断文件是否是普通表单
                     if (!item.isFormField()) {
                         // item.getInputStream() 获取上传文件的输入流
                         is = item.getInputStream();
                     } else {
                     	//上传key名
                         String paramName = item.getFieldName();
                         //上传key对应的value
                         String paramValue = item.getString();
                         //将value转码
                         paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
                         //将文件名及对应的key储存到HashMap中
                         params.put(paramName, paramValue);
                     }
                 }
                   
             } catch (Exception e) {
                 e.printStackTrace();
             }
             //返回图片数据流
             return is;
         }
	//通过如下代码,把文件保存为jpg格式
	public static BufferedImage change2jpg(File f) {
		try {
			java.awt.Image i = Toolkit.getDefaultToolkit().createImage(f.getAbsolutePath());
			PixelGrabber pg = new PixelGrabber(i, 0, 0, -1, -1, true);
			pg.grabPixels();
			int width = pg.getWidth(), height = pg.getHeight();
			final int[] RGB_MASKS = { 0xFF0000, 0xFF00, 0xFF };
			final ColorModel RGB_OPAQUE = new DirectColorModel(32, RGB_MASKS[0], RGB_MASKS[1], RGB_MASKS[2]);
			DataBuffer buffer = new DataBufferInt((int[]) pg.getPixels(), pg.getWidth() * pg.getHeight());
			WritableRaster raster = Raster.createPackedRaster(buffer, width, height, width, RGB_MASKS, null);
			BufferedImage img = new BufferedImage(RGB_OPAQUE, raster, false, null);
			return img;
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值