当前位置: 代码网 > it编程>编程语言>Java > Java实现文件图片的预览和下载功能

Java实现文件图片的预览和下载功能

2025年04月03日 Java 我要评论
java实现文件(图片)的预览和下载 @apioperation("访问文件") @getmapping("/download/{name}") public void getima

java实现文件(图片)的预览和下载

    @apioperation("访问文件")
    @getmapping("/download/{name}")
    public void getimage(httpservletresponse response, @pathvariable("name") string name) throws ioexception {
        //动态获取图片存放位置
        //        string path = getuploadpath();//获取当前系统路径
        string path = upload;
        string imagepath = path + file.separator + name;
        if (!new file(imagepath).exists()) {
            return;
        }
        if (name.endswith("jpg") || name.endswith("png") || name.endswith("gif") || name.endswith("jpeg")) {
            //预览时不需设置content-disposition
            response.setcontenttype("image/jpeg;charset=utf-8");//图片
        }else {
            //下载
        response.setcontenttype("application/octet-stream");//文件
        response.setheader("content-disposition", "inline; filename=" + urlencoder.encode(name, "utf-8"));
        }
        servletoutputstream outputstream = response.getoutputstream();
        outputstream.write(files.readallbytes(paths.get(path).resolve(name)));
        outputstream.flush();
        outputstream.close();
    }

注意:踩过的坑,文件名不可以带*号,带*会报java.io.filenotfoundexception

通过mvc与hutool工具集下载在resources目录下的文件,注意引入的包

package com.example.controller;

import org.springframework.core.io.classpathresource;
import org.springframework.core.io.resource;
import org.springframework.http.httpheaders;
import org.springframework.http.httpstatus;
import org.springframework.http.responseentity;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;

import java.io.ioexception;
import java.nio.file.files;

@restcontroller
@requestmapping("/api/files")
public class filedownloadcontroller {

    @getmapping("/download")
    public responseentity<resource> downloadfile() {
        string filename = "example.txt"; // 要下载的文件名
        
        try {
            // 从 resources 目录加载文件
            classpathresource resource = new classpathresource(filename);
            
            if (!resource.exists()) {
                return responseentity.notfound().build();
            }

            // 设置响应头
            httpheaders headers = new httpheaders();
            headers.add(httpheaders.content_disposition, "attachment; filename=" + resource.getfilename());

            // 返回文件作为响应
            return responseentity.ok()
                    .headers(headers)
                    .contenttype(org.springframework.http.mediatype.application_octet_stream)
                    .body(resource);
        } catch (ioexception e) {
            return responseentity.status(httpstatus.internal_server_error).build();
        }
    }
}

方法补充

方法一:

该代码段展示了如何在spring boot中实现文件的预览和下载功能。通过httpservletrequest和httpservletresponse,根据请求参数判断是预览还是下载,并设置相应的内容类型和content-disposition。文件路径为固定目录下,读取文件内容并写入响应流。

具体如下

package com.example.demo.controller;

import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;

import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import java.io.file;
import java.io.fileinputstream;
import java.io.outputstream;

/**
 * @author long
 * @version 1.0.0
 * @classname filecontroller
 * @description todo
 * @createtime 2022.03.18 18:47
 */
@restcontroller
@requestmapping("/demo")
public class filecontroller {


    @getmapping("/file")
    public void filepreviewordownload(httpservletrequest request, httpservletresponse response) throws exception {
        string filename = request.getparameter("filename");
        //type. p预览,d下载
        string type = request.getparameter("type");
        response.reset();
        response.setcharacterencoding("utf-8");

        file file = new file("c:\\users\\long\\desktop\\" + filename);
        fileinputstream fis = new fileinputstream(file);

        if ("d".equalsignorecase(type)) {
            //下载
            response.setcontenttype("application/octet-stream");
            response.setheader("content-disposition", "attachment;filename*=utf-8''" + system.currenttimemillis() + filename.substring(filename.lastindexof(".")));

        } else {
            //预览时不需设置content-disposition
//            response.setcontenttype("application/octet-stream");
//            response.setcontenttype("text/html;charset=utf-8");
//            response.setheader("content-disposition","inline;filename=" + system.currenttimemillis() + filename.substring(filename.lastindexof(".")));
        }
        outputstream os = response.getoutputstream();
        byte[] bytes = new byte[1024];
        int length = 0;
        while ((length = fis.read(bytes)) != -1) {
            os.write(bytes, 0, length);
        }
        os.close();
        fis.close();
    }


}

方法二:

java 实现图片或文件在线预览及下载

完整代码

@getmapping("/downfile")
    public void downfile(httpservletresponse response, httpservletrequest request) {
        try {
//            file file = new file("c:\\users\\hnsh\\pictures\\铁山靠.png");
            file file = new file("f:\\baidunetdiskdownload\\activiti教程 (1).pdf");
            string filename = file.getname();
            string filetype = filename.substring(filename.indexof(".") + 1);

            // 以流的形式下载文件。
            fileinputstream fileinputstream = new fileinputstream(file);
            inputstream fis = new bufferedinputstream(fileinputstream);
            byte[] buffer = new byte[1024];
            int len = 0;
            // 清空response
            response.reset();
            // 设置response的header
            // 解决跨域
            response.addheader("access-control-allow-origin", "*");
            boolean b = "jpg".equalsignorecase(filetype) || "png".equalsignorecase(filetype) || "gif".equalsignorecase(filetype);
            // 图片预览
            if (b) {
                response.setcontenttype("image/" + filetype);
            } else if ("pdf".equalsignorecase(filetype)) {
                // pdf 预览
                response.setcontenttype("application/pdf");
            } else {
                // 直接下载
                response.setcontenttype("application/text;chartset=utf-8");
                response.addheader("content-disposition", "attachment;filename=" + urlencoder.encode(filename, "utf-8"));
                response.addheader("content-length", "" + file.length());
            }
            outputstream toclient = new bufferedoutputstream(response.getoutputstream());
            int a = 0;
            while ((len = fis.read(buffer)) != -1) {
                a = len + a;
                toclient.write(buffer, 0, len);
            }
            toclient.flush();
            toclient.close();
        } catch (ioexception ex) {
            ex.printstacktrace();
        }
    }

到此这篇关于java实现文件图片的预览和下载功能的文章就介绍到这了,更多相关java图片预览和下载内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com