当前位置: 首页 > news >正文

【Javaweb】【瑞吉外卖】上传下载实现

上传文件

原理:前端让用户选择一个文件,点击丢给后端上传,后端servlet接收到这些请求就进行应答构建连接,完了就开始接收。
但实现这些原理可以不是很懂。servlet封装了一下,spring boot也封装了一下。实现就比较简单。

实现过程:

  1. 确定下载的目标路径
  2. 转存就好了
    /**
     * 输入这个类就是spring boot基于servlet进行封装,直接 写这个参数就可以接收
     * 但是这个参数名称file要与前端传入一致,否则应该要写别的注解
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public R<String> upload(MultipartFile file){

        log.info(file.toString());

        // 看一下输入的basePath是否建了目录
        // 否则不会自己建目录会报错
        File dir = new File(basePath);

        if (!dir.exists()){
            dir.mkdir();
        }

        String originPathName = file.getOriginalFilename();

        // 由于如果按照源文件名字保存,可能会重名,所以使用UUID进行编码然后保存
        // 拼接一下拓展名,就好了
        String suffix = originPathName.substring(originPathName.lastIndexOf("."));
        String prefix = UUID.randomUUID().toString();

        String fileName = prefix + suffix;

        try {
            // 最后调用transfer就可以转存了
            file.transferTo(new File(basePath + fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return R.success(fileName);
    }

下载文件

下载文件稍稍会复杂一些些,但其实也还好,就是用文件IO流就好了。
保存好的文件是保存在了服务端刚刚设置的文件夹下,拿着时候相对于服务端程序就是需要input一下,将upload的文件读入程序,然后再去找一个output输出就好了。

实现过程:

  1. 开启文件IO流将保存的文件读入程序。
  2. 从HTTP Response里面获得输出流,往里面写就好了。

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){

        FileInputStream fis = null;
        ServletOutputStream sos = null;
        try {
            fis = new FileInputStream(new File(basePath + name));

            sos = response.getOutputStream();

            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes) ) != -1){
                sos.write(bytes);
            }

            sos.flush();

        } catch (Exception e) {
            // e.printStackTrace();
        }  finally {
            try {
                fis.close();
                sos.close();
            } catch (Exception e) {
                // e.printStackTrace();
            }
        }


    }

文章转载自:
http://brawl.dmyyro.cn
http://baudrons.dmyyro.cn
http://beeves.dmyyro.cn
http://aurantiaceous.dmyyro.cn
http://amend.dmyyro.cn
http://castrate.dmyyro.cn
http://bandicoot.dmyyro.cn
http://buttonbush.dmyyro.cn
http://alamein.dmyyro.cn
http://basanite.dmyyro.cn
http://byproduct.dmyyro.cn
http://bok.dmyyro.cn
http://britzka.dmyyro.cn
http://amatol.dmyyro.cn
http://billie.dmyyro.cn
http://antevert.dmyyro.cn
http://angus.dmyyro.cn
http://celebrate.dmyyro.cn
http://academism.dmyyro.cn
http://beachy.dmyyro.cn
http://cataphoresis.dmyyro.cn
http://bellerophon.dmyyro.cn
http://brachydactyl.dmyyro.cn
http://anime.dmyyro.cn
http://bowleg.dmyyro.cn
http://ahvenanmaa.dmyyro.cn
http://bessy.dmyyro.cn
http://breezily.dmyyro.cn
http://arrivisme.dmyyro.cn
http://baor.dmyyro.cn
http://www.dtcms.com/a/9271.html

相关文章:

  • oppo前端开发一面
  • 搭建一个自己的AI学术语音助手(二)
  • VBA_NZ系列工具NZ02:VBA读取PDF使用说明
  • Android Studio实现内容丰富的安卓校园二手交易平台
  • 搭建mysql主从复制(主主复制)
  • Vue 3中的reactive:响应式状态的全面管理
  • Hystrix的原理及应用:构建微服务容错体系的利器(二)
  • matplotlib-直方图
  • tvm android_rpc_test.py执行报错解决
  • 熔断降级的方案实现
  • php.exe运行时,提示缺少VCRUNTIME140.dll
  • 从混沌到秩序——90年代中国数据库的激烈角逐
  • 学生时期学习资源同步-JavaSE理论知识
  • 机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?
  • 怎么修改游戏ip地址
  • Editor.md-编辑器
  • ChatGPT的核心技术
  • C#学习汇总
  • css动画和js动画的区别?
  • 基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案
  • OpenCV 图像的几何变换
  • redis中setnx命令的底层原理是什么
  • 三个表联合查询的场景分析-场景1:a表关联了b表和c表
  • 【Java基础】IO流(二)字符集知识
  • vue3路由跳转时,页面如何滚动到顶部
  • 如何更改ldap用户在local node上的默认shell
  • 从前端到前端框架
  • 专题二 - 滑动窗口 - leetcode 76. 最小覆盖子串 | 困难难度
  • Node.js入门基础—day01
  • Notepad++从文件夹查找文本内容