读取数据库中的二进制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.csdn.net/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();
		}

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

猜你喜欢

转载自blog.csdn.net/lc14750429/article/details/82384219