当前位置: 首页 > 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();
            }
        }


    }

相关文章:

  • 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解决方案
  • 礼来公布头对头研究详细结果:替尔泊肽在所有减重目标中均优于司美格鲁肽
  • 宝妈称宝宝在粽子中吃出带血创可贴,来伊份:已内部排查
  • 侧记|青年为何来沪创新创业?从这一天寻找答案
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • 中方就乌克兰危机提出新倡议?外交部:中方立场没有变化
  • 全国人大常委会启动食品安全法执法检查