美文网首页
使用Springmvc及jQuery实现文件下载

使用Springmvc及jQuery实现文件下载

作者: SmileMylife | 来源:发表于2019-08-06 21:28 被阅读0次

前台代码:

//点击文件下载按钮
$("#fileDownload").click(function() {
    /*$.post("/ssm/fileDownload", {"fileName": "a.jpg"}, function(data, status) {
        if (status === "success") {
            console.log("下载成功");
        }
    })*/
    window.location.href = "http://localhost:8080/ssm/fileDownload";
})

后台代码:

@RequestMapping(value = "fileDownload", method = RequestMethod.GET)
public ResponseEntity<byte[]> fileDownload(HttpServletResponse response, String fileName) throws Exception {
    /*if (StringUtils.isBlank(fileName)) {
        throw new Exception("文件下载失败,文件名为空");
    }*/
    /*FileInputStream fileInputStream = new FileInputStream(new File("a.jpg"));
    ServletOutputStream outputStream = response.getOutputStream();
    response.setContentType("application/octet-stream");
    response.addHeader("Content-Disposition", "attachment; filename" + "testfilename");

    int lenth;
    while ((lenth = fileInputStream.read()) > -1) {
        outputStream.write(lenth);
        outputStream.flush();
    }
    outputStream.close();*/


    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    httpHeaders.setContentDispositionFormData("attachment", "filename.jpg");
    byte[] bytes = FileUtils.readFileToByteArray(new File("a.jpg"));
    return new ResponseEntity<byte[]>(bytes, httpHeaders, HttpStatus.OK);
}

其中,前台使用jQuery发送ajax请求来实现文件下载时,会发现后台请求完全正常,但是回到前台文件是以字符串的形式返回,不能实现文件下载功能。经查证发现ajax并不能实现文件下载,只适用返回为字符串形式的请求,因此转换一下思路,使用form表单、或者使用window.location.href = "www.baidu.com"这种形式去发送请求,或者使用a标签来发送请求。

引申一种新式的文件下载方式,使用html5中的a标签来进行下载,用其最新的属性download。

<a href="文件路径" download="下载文件名">文件下载</a>
以上内容,其中href为文件的路径,download为下载时的文件名称,假如不加download属性时该链接是新建窗口浏览模式,该属性可以将其改变为下载窗口形式。

相关文章

网友评论

      本文标题:使用Springmvc及jQuery实现文件下载

      本文链接:https://www.haomeiwen.com/subject/osjgdctx.html