grails文件下载+图片查看

阅读更多
/**
 * 下载
 * @return
*/
def download(){
    def fileObj = ValuationHistoryForNSQ.get(params["id"])
    def file_name = fileObj.getFile_name()
    def file_type = fileObj.getFile_type()
    def root_path = fileObj.getRoot_path()
    def file_path = fileObj.getFile_path()
    def downloadPath = root_path+file_path+file_name

    def bis = new BufferedInputStream(new FileInputStream(downloadPath))
    def bos = new BufferedOutputStream(response.outputStream)

    long fileLength = new File(downloadPath).length()

    response.setCharacterEncoding("UTF-8")
    response.setContentType("multipart/form-data")

    String userAgent = request.getHeader("User-Agent").toLowerCase()

    if( userAgent.contains("msie") || userAgent.contains("like gecko") ){
        // win10 ie edge 浏览器 和其他系统的ie
file_name = URLEncoder.encode(file_name, "UTF-8")
    }else {
        file_name = new String(file_name.getBytes("UTF-8"), "iso-8859-1")
    }

    response.setHeader("Content-disposition", 
	String.format("attachment; filename=\"%s\"", file_name))
    response.setHeader("Content-Length", String.valueOf(fileLength))

    byte[] buff = new byte[2048]
    int bytesRead
    while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
        bos.write(buff, 0, bytesRead)
    }
    bis.close()
    bos.close()
}


/**
 * 查看图片
 * @return
*/
def look(){
    def fileObj = ValuationHistoryForNSQ.get(params["id"])
    def file_name = fileObj.getFile_name()
    def file_type = fileObj.getFile_type()
    def root_path = fileObj.getRoot_path()
    def file_path = fileObj.getFile_path()
    def downloadPath = root_path+file_path+file_name

    //读取本地图片输入流
FileInputStream inputStream = new FileInputStream(downloadPath);
    int i = inputStream.available();
    //byte数组用于存放图片字节数据
byte[] buff = new byte[i];
    inputStream.read(buff);
    //记得关闭输入流
inputStream.close();
    //设置发送到客户端的响应内容类型
response.setContentType("image/*");
    OutputStream out = response.getOutputStream();
    out.write(buff);
    //关闭响应输出流
out.close();
}
查看图片前台方法:
<a href="javascript:void(0)" class="btn btn-xs btn-primary btn-outline" 

onclick="look(${it?.id})">查看a>
function look(id) {
    var srcPath = '/valuationHistoryForNSQ/look?id='+id
    var imgPath = '<img src="'+srcPath+'" width="800px" height="500px">'
    layer.open({
        type: 1 //Page层类型
        ,area: ['800px', '542px']
        ,title: '查看'
        ,scrollbar: false //屏蔽浏览器滚动条
        ,shade: 0.6 //遮罩透明度
        ,maxmin: false //允许全屏最小化
        ,anim: 5 //0-6的动画形式,-1不开启
        ,content: imgPath
});
}

grails文件下载,注意中文乱码问题,我的文件路径、文件名称是从数据库查出来的。

我用的win10系统,值得注意的是win10 ie和edge与其他浏览器的区别

你可能感兴趣的:(grails文件下载)