jsp页面操作图片显示

项目中遇到了图片显示的问题,查了很多资料也没个完整能用的,特此记录下来!

场景如下:

上传的图片文件夹在某个盘符下面,把图片上传到upload文件夹,如(d:/upload),然后显示图片的时候用流读取!


jsp页面代码:

<meta http-equiv="Pragma" content="no-cache">   //用流读取的时候,浏览器会去取缓存的数据,尤其是图片,不会重新去请求,所以有的时候显示不出来,原理跟验证码的实现同理,一般获取验证码的时候请求条件会加上当前时间,因为时间时刻在变化,所以每次都能重新请求。所以在这种情况下让刷新jsp页面的时候就清空缓存。


<img alt="" src=".../showImage.do?pic_addr=a.jpg"/>


逻辑处理代码:


/**
     * 显示图片
     * @param pic_addr 数据库中存储的文件名称
     * @return
     */
    @RequestMapping("showImage")
    public void showImage(HttpServletRequest re,HttpServletResponse response,String pic_addr){
    if(null != pic_addr && !"".equals(pic_addr)){
    //设置文件类型
        response.setContentType("image/*");
        response.setHeader("Cache-control", "no-cache");
            FileInputStream fis = null; 
            OutputStream os = null; 
            //获取文件路径
            pic_addr = cacheService.queryParam("ENOCP_SAVE_FILE") + File.separator + pic_addr;
            try {
            //读取文件并输出
            fis = new FileInputStream(new File(pic_addr));
            os = response.getOutputStream();
                int count = 0;
                byte[] buffer = new byte[1024];
                while ( (count = fis.read(buffer)) != -1 ){
                os.write(buffer, 0, count);
                os.flush();
                }
            }catch(Exception e){
            e.printStackTrace();
            }finally {
                try {//关闭流
    if(null != fis){
                fis.close();
                }
                if(null != os){
                os.close();
                }
    } catch (IOException e) {
    e.printStackTrace();
    }
            }
    }
    }


此段代码中红色笔记语句是重点,我就是这句没加上,挣扎了好久,小语句,大问题!需注意!

cacheService.queryParam("ENOCP_SAVE_FILE") 此语句是得到上传的文件夹路径,即(d:/upload)


由以上就能完整的显示图片了。


下面再附上上传的代码:

/**
     * 上传封面图片
     * @param 
     * @return 返回保存在数据库中的文件名
     */
    @Override
    public String uploadImgPlan(MultipartFile file, HttpServletRequest request,ICacheService cacheService) {
    //有文件的场合才上传
    String fileName = "";
    if(file.getSize() != 0){
    // 从缓存获取文件存储路径
            String reportPath = cacheService.queryParam("ENOCP_SAVE_FILE");
            // 格式:时间戳.后缀名
            fileName = System.currentTimeMillis()//返回以毫秒为单位的当前时间
            + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."), file.getOriginalFilename().length());
            String filePath = reportPath+ File.separator + fileName;
            try{
                //写文件操作
                InputStream fis = file.getInputStream();
                FileOutputStream fos = new FileOutputStream(new File(filePath));
                byte[] bbs = new byte[10240];//10兆
                int len = -1;
                while(-1 != (len=fis.read(bbs))){
                    fos.write(bbs,0,len);
                }
                fos.close();
                fis.close();
            }catch(Exception ex){
                ex.printStackTrace();
            }
    }
        return fileName;//返回保存在数据库中的文件名
    }




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值