读取数据库中的二进制byte[]数据并通过浏览器下载图片

    因为数据库的改变,将文件图片等以二进制存在mongodb中。需要使用则通过浏览器访问进行下载。

//result是通过数据接口访问取得图片的byte[]数据:

byte[] result = null;

result = mongoService.selectData(collectionName, queryMap);

    取得一个文件名

public String getFileName(String collectionName){
		String suffix = "";
		if(collectionName.contains("png")){
			suffix = ".png";
		}else if(collectionName.contains("jpg")){
			suffix = ".jpg";
		}else if(collectionName.contains("doc")){
			suffix = ".doc";
		}else if(collectionName.contains("docx")){
			suffix = ".docx";
		}else if(collectionName.contains("excel")){
			suffix = ".xls";
		}else if(collectionName.contains("bmp")){
			suffix = ".bmp";
		}else{
			suffix = ".txt";
		}
        //DateTime只是一个工具类
		DateTime dt = DateTime.now();
		String name = dt.toDateTimeString().replace(" ", "_");
        //随机数
		Random r = new Random();
		int i = r.nextInt(100);
		String fileName = name + i + suffix;
		return fileName;
	}

       根据得到的byte[]下载文件,新手,对io流的掌握不得要领,虽然简单,依旧花了点时间刷了一阵子资料,难过,还得恶补一下才行。关于响应的一些设置,参考这位前辈的:https://blog.youkuaiyun.com/luman1991/article/details/53423305

        //此处需要设置ISO8859-1,application/octet-stream为未知文件类型时使用
                response.setContentType("application/octet-stream;charset=ISO8859-1");
		BufferedOutputStream output = null;
		try {
			output = new BufferedOutputStream(response.getOutputStream());
			String fileNameDown = new String(fileName.getBytes(), "ISO8859-1");
            //fileNameDown上面得到的文件名
			response.setHeader("Content-Disposition", "attachment;filename=" +             
                       fileNameDown);
			output.write(result);
			response.flushBuffer();
		} catch (IOException e) {
			e.printStackTrace();
		}

    然后就可以在浏览器中下载了(图片下载以测试,其他类型文件暂未测试)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值