Springboot后台 uniapp前端 实现文件的下载与上传〖文件下载篇〗

Springboot实现文件的下载与上传

一.Springboot为后台实现下载文件

  • 大概思路:从前端获取一个要下载的文件名后(包含后缀名称),HttpServletResponse返回一个流文件
  • 可能存在的问题:uniapp为前端的saveFile()方法不支持h5
  • 存在跨域问题
  • 文件大小的限制

二.上代码

 /**
     * 下载文件
     * @param name
     * @param response
     * @return
     * @throws UnsupportedEncodingException
     */
    @GetMapping("/download/{fileName}")
    public CommonReturnType downloadFile(@PathVariable("fileName") String name, HttpServletResponse response) throws UnsupportedEncodingException {

        String filePath="E:/fileSource";  //文件的根目录
        File file=new File(filePath+"/"+name); //处理用的文件类,用于操作这个目录下的文件
        if (file.exists()){ //判断是否存在此文件
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;fileName=" +   java.net.URLEncoder.encode(name,"UTF-8"));  //为了下载的东西不乱码而设置前三个格式

            byte[] buffer=new byte[1024]; //每次读取的最大字节数
            FileInputStream fis=null;  //建立缓冲输入字节流
            BufferedInputStream bis=null; 
            OutputStream os=null;
            try {
                os=response.getOutputStream();//向response缓冲区中写入字节
                fis=new FileInputStream(file);
                bis=new BufferedInputStream(fis);
                int i=bis.read(buffer);  //读取缓存,若读不到返回-1
                while(i!=-1){
                    os.write(buffer);
                    i=bis.read(buffer);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println("----------file download---" + name);
            try{
                bis.close();  //关闭流
                fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
        return null;
    }

三.前端

<a href="http://127.0.0.1:8093/file/download/kaikai.png">下载图片</a>
  • 这里我直接指定了download下的路径参数为kaikai.png是一张图片
  • 通过连接的形式下载东西

在这里插入图片描述
通过点击会出现下载选项,选择把保存就能保存到本地!

四.处理问题
跨域问题处理: 由于我用的是springboot后台,直接在一个controller层的类名上加一个 @CrossOrigin注解,即可解决跨域问题
前端h5可以通过更简洁的方法处理下载,我用的链接太傻了,会uniapp的大佬教我解决一下~

制作不易,py请标注~~

java项目之基于uniapp+springboot兼职app(源码+说明文档+演示视频) 登录为学生时: 四个页面 首页: 1.区域选择(锦江区、青羊区、金牛区、武侯区、成华区、龙泉驿区、青白江区、新都区、温江区、双流区、郫都区),选择某一区域就显示该区域的兼职信息。 2.搜索框 3.轮播图(3-4张关于工作的图片) 4.6个兼职模块(日结、月结、最新、周末、暑假工、寒假工),点进去有对应兼职列表页面。点到某一兼职信息有该兼职的信息展示页面。在此页面用户可以选择报名该兼职。 分类: 1.标题:全部兼职 2.横向可滑动导航栏(内容:餐厅服务员、发单员、导游、家教、促销员、礼仪、翻译7个兼职种类)每类下面兼职信息以列表形式呈现,兼职信息列表随导航种类的切换而切换。点到某一兼职信息有该兼职的信息展示页面。在此页面用户可以选择报名该兼职,用户可以和发单人聊天沟通 消息: 1. 待录用、待评价、已完成,我的发起4类信息,页面布置分类页面一样,以列表方式呈现,点哪类就切换哪类的信息。发起人可以同意申请,申请人可以看到状态,申请人任务完成后由发起人点击完成,发起人可以评价 我的 1. 标题:个人中心 2. 我的简历、关于我们、系统设置四个模块 3. 我的简历:固定模板让用户填写,用户不用自己上传简历。可随时更新简历。 4. 我的发起:任何人都可以发起兼职,对于我的发起,有查看报名人数及报名人的信息,信息包含简历
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值