Java读写MySQL备份生成的文件返回给页面下载,页面下载到的是空文件,而MySQL备份的不是空文件
//数据备份
    @ResponseBody
    @GetMapping("/backups")
    @RequiresPermissions("system:data:backups")
    public void list(HttpServletResponse response) {
        //备份文件
        String filePath="C:\\beifen";//备份文件的路径
        String dbName="log_system233"+(new Date().getTime());//备份文件的名称
        try {
            Process process = Runtime.getRuntime().exec(
                    "cmd /c mysqldump -u root -proot " + "log_system233" + " > "
                            + filePath + "/" + dbName
                            + ".sql");
            //备份的数据库名字为log_system,数据库连接和密码均为root

        } catch (Exception e) {
            e.printStackTrace();
        }

        //下载备份的文件
        String filename = "C:\\beifen/";
        String filenameZip = filename + dbName + ".sql";//获取文件的路径
        try {
            response.setContentType("application/x-execl");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + new String((dbName+".sql").getBytes(), "UTF-8"));

            // 读取文件
            InputStream in = new FileInputStream(filenameZip);
            ServletOutputStream outputStream = response.getOutputStream();
            // 写文件
            int b;
            while ((b = in.read()) != -1) {
                outputStream.write(b);
            }
            in.close();
            outputStream.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }
        //结束
    }

这是页面下载的文件
图片说明

如果在程序程加上断点,那么页面下载的就不是空文件了;但不加断点的话,页面下载的就是空文件

1个回答

你是通过命令进行备份的 你的数据库还在备份 所以你获取到的可能就是一个空文件 你加上断点后数据库命令执行完了相当与你等待了 数据备份命令执行完了所以获取就不是空文件

wang_k_123
小_破孩 回复Hao_RanYang:调用 process.waitFor()进行判断等待 备份完成后再进行下载
5 个月之前 回复
Hao_JanYang
Hao_RanYang 那么怎么解决这个问题呢?
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问