后台根据地址传输二进制流,前台显示图片

本文详细介绍了如何在后端使用Java处理图片流并返回给前端,通过设置HTTP头实现二进制流数据传输,以及在前端利用XMLHttpRequest请求获取图片Blob数据并将其转换为图片源进行展示的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、后台

 @RequestMapping(value="/getPicPathByPicId/{picId}",method=RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<byte[]> getPicStream(@PathVariable("picId")String picId)throws IOException{
    	Upload sysFile = fileService.getFileById(Long.valueOf(picId));
    	String filePath = sysFile.getFilePath();
		File file = new File(filePath);
	    //http头部
	    HttpHeaders httpHeaders = new HttpHeaders();
	    //application/octet-stream : 二进制流数据
	    httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),httpHeaders, HttpStatus.CREATED);
    	
    }

2、前台

2.1、不能用ajax传输二进制流

2.2、status根据传输成功的status code决定

 function picFormatter(value,row, index){
        	 var  s = '<a class = "view"  href="javascript:void(0)">'+
  		   '<img id ="imgcontainer" style="width:300;height:40px;"/></a>';
        	var picId = row.picture;
        	var url = realPath+"/xzzf/file/getPicPathByPicId/"+ picId;
        	var xhr = new XMLHttpRequest();    
            xhr.open("get", url, true);
            xhr.responseType = "blob";
            xhr.onload = function() {
                if (this.status == 201) {
                    var blob = this.response;
                    var img = document.getElementById("imgcontainer");
                    img.onload = function(e) {
                      window.URL.revokeObjectURL(img.src); 
                    };
                    img.src = window.URL.createObjectURL(blob);
         } }
            xhr.send();
            return [s,].join('');
     	  
        }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值