文件的上传和下载

文件的上传和下载是每一个的系统中必备的功能,本文章详细解释文件的上传与下载”的全部过程。

文件的上传

文件的上传也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览和下载的过程。文件上传在项目中应该非常广泛。我们经常发的微信朋友圈等。

文件上传前端的要求

文件上传时,对页面的from表单有以下几个要求

1 method ="post"                           采用post方式提交数据
2 enctype = "multipart/from-data"          采用nultipart格式上传文件
3 trpe = "file"                            使用input控件上传


【例子】:<from method ="post"  action ="/common/upload" enctype ="multpart/from-data">
         <input name ="myFile" type = "file">
         <input type ="submit value = "提交">
    <from>

服务端接收文件

服务端要接收客户端页面上传到的文件,通常都会使用Apache的两个组件:

1 commons-fileupload

2 commons-io

在spring框架在spring-web包中对文件上传进行了封装,大大简化了服务端的代码,我们只需要在Controller方法中声明一个Multipart类型的参数即可接收上传的文件。

后端具体代码的编写:

  这个代表的是上传图片在电脑保存的位置,一般把路径放在配置文件中,便于修改。
  @Value("${reggie.path}")
    private String basePath;

@PostMapping("/upload")
    public Result<String> upload(MultipartFile file){
        //获得原始的文件名
        String filename = file.getOriginalFilename();
        //截取后面的文件格式后缀
       String suffix =  filename.substring(filename.lastIndexOf("."));
        //使用UUID重新生成文件名称,防止文件名称重复
        String filenames = UUID.randomUUID().toString() +suffix;
        
        //创建一个新的目录
        File file1 = new File(basePath);
        //判断保存的时候是否存在一个这样的目录,如果存在的话,则保存,如果不存在则创建一个
        if (!file1.exists()){
            //目录不存在,则创建
            file1.mkdirs();
        }
        try {
        //这里就会得到一个上传到图片的,完后将临时图片转存到指定位置
            file.transferTo(new File(basePath + filenames));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //返回文件名称,保存到数据库中
        return Result.success(filenames);
    }

具体的实现步骤:

1、定义一个方法MultipartFile 作为参数,传进去

2、我们通过MultipartFile得到的图片是一个临时文件,我们需要调用transferTo()方法,将临时文件转存到那个位置。

3、在我们的配置文件中顶一个这样的路径去保存图片,并通过@Value来注入进来,就是上面的basePath

4、来获得文件的原始名字,并通过substring()来截取文件的后缀

5、我们使用UUID这个类重新生成新的文件名。

6、就是在保存到的时候,判断目录是否存在,不存在就生成一个新的目录。

文件的下载 

文件的下载也称为download,是指文件从服务器传输到本地计算机的过程

通过浏览器进行文件的下载,通常有两种表现的形式:

       1、以附件的形式下载,弹出保存对话框。将文件保存到指定磁盘目录

        2、直接在浏览器中打开

通过浏览器进行文件的下载,本质上就是服务端将文件以流的形式写回到浏览器的过程

后端代码的具体编写

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

        try {
            //输入流,通过输入流读取文件内容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath+name));
            //输出流,通过输出流将文件写回浏览器,在浏览器中展示图片了
            ServletOutputStream outputStream = response.getOutputStream();
            //设置响应的格式
            response.setContentType("image/jpeg");
            int len =0;
            //读到的放到这个数组里面
            byte[] bytes = new byte[1024];
            while ((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

具体的实现步骤:

1、定义一个输入流,通过输入流来读取文件内容

2、定义一个输出流,通过输出流将文件回显到浏览器,从而显示东西

3、设置一个响应格式

4、定义一个变量,将读到数据保存到变量中

5、再判断,当读完以后,通过write方法来回显

6、刷新流,并且关闭流。 

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Agnoni

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值