从数据库中获取文件转成的byte[] 文件名 文件类型。我要怎么拨给浏览器下载

图片说明

如图的话

图片说明

浏览器接收到了一堆东西 但是没有开启下载

3个回答

一个简单而且符合springmvc方式的做法:
https://my.oschina.net/datevan/blog/654593

   @RequestMapping("download")  
    public ResponseEntity<byte[]> download() throws IOException {  
        HttpHeaders headers = new HttpHeaders();  
       // headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);  
        //设置文件名
        headers.setContentDispositionFormData("attachment", "a.xls");  
        String file = TestController.class.getResource("/config/").getPath()+"a.xls";

        //把文件转成字节数组
        File byteFile = new File(file);
        int size = (int) byteFile.length();
        FileInputStream inputStream = new FileInputStream(byteFile);
        byte[] bytes = new byte[size];

        int offset=0;
        int readed;
        while(offset<size && (readed = inputStream.read(bytes, offset,inputStream.available() )) != -1){
            offset+=readed;
        }
        inputStream.close();

        //返回
        return new ResponseEntity<byte[]>(bytes,headers, HttpStatus.OK);  
    }
qq_38817306
qq_38817306 最终用ResponseEntity搞掂了 最重要的问题是。。。我页面一开始没用A标签提交
一年多之前 回复
qq_38817306
qq_38817306 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter 我看到配置文件有这个东西。。是不是禁止下载了
一年多之前 回复

/**
* 文件下载
* @param response
* @param fileName 文件名称
* @param filePath 文件服务器地址
*/
@RequestMapping("/download")
public void downloadFile(HttpServletResponse response, @RequestParam("fileName")String fileName, @RequestParam("filePath") String filePath){
OutputStream os = null;
try{
os = response.getOutputStream();
fileName = URLEncoder.encode(fileName, "UTF-8");
byte[] bytes = FastdfsClientUtil.downloadFileInner(filePath);
os.write(bytes);
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
os.flush();
}catch(Exception e){
LOGGER.error("下载文件失败", e);
}finally {
if(os != null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}//之前详细研究过浏览器下载文件的需求 包括不同浏览器的支持,文件下载,文件预览

qq_38817306
qq_38817306 去看了 也改了下 还是不行 感觉我mvc拦截了
一年多之前 回复
weixin_40899682
IT清流李小白 回复qq_38817306: https://blog.csdn.net/ios_xumin/article/details/52944366 看这个了解一下,然后debug你的代码查看文件类型
一年多之前 回复
qq_38817306
qq_38817306 回复weixin_40899682: 下载类型是指哪里?
一年多之前 回复
weixin_40899682
IT清流李小白 回复qq_38817306: 顺带提示一下 你的入参传入了两个HttpServletResponse
一年多之前 回复
weixin_40899682
IT清流李小白 回复qq_38817306: response.setContentType("application/octet-stream;charset=UTF-8"); 看一下设置的下载类型和文件类型是否一致,建议指定一下编码集
一年多之前 回复
qq_38817306
qq_38817306 回复weixin_40899682: fileName得包含后缀是吗?我 的fileName包含后缀的 然后传给浏览器 看network接收了22MB数据 但是没下载
一年多之前 回复
weixin_40899682
IT清流李小白 回复qq_38817306: 你可以读取出来然后创建OutputStream 对象调用write方法写入,记得请求头可以设置下载文件的格式,不然就会出现无法解析下载的问题或下载后乱码的问题
一年多之前 回复
qq_38817306
qq_38817306 但我这个文件没有服务器地址啊,它以BLOB的byte[]形式存放在数据库字段中
一年多之前 回复

顺带提示一下 你的入参传入了两个HttpServletResponse

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问