Java 简单实现文件上传下载

一、介绍

之所以说是简单呢,是因为文件上传后直接以二进制的方式存入数据库中,下载的时候再转成文件。
采用springboot, springdata实现。

二、具体实现

controller层

upload

    @Autowired
    private MyFileDao myFileDao;
    
    @PostMapping(value = "file")
    @ResponseBody
    public ResponseEntity<?> uploadFile(@RequestParam MultipartFile file) {
        
        //利用一个对象去存储文件的二进制
        MyFile myFile = new MyFile();
        myFile.setFile(file.getBytes());
        myFile.setFileName(file.getOriginalFilename());
        
        myFileDao.save(myFile);
        
        return new ResponseEntity<>(HttpStatus.OK);
    }
复制代码
download
    @GetMapping(value = "file")
    @ResponseBody
    public ResponseEntity<?> downloadFile(@RequestParam Long id){
        ResponseEntity responseEntity;

        Optional<MyFile> myFile = myFileDao.findById(id);
        byte[] fileByte = myFile.get().getFile();
        
        //设置header很关键,就是告诉浏览器你返回的是文件
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition","attachment;filename="+myFile.get().getFileName());
        
        responseEntity = new ResponseEntity<>(fileByte, headers, HttpStatus.OK);
        return responseEntity;
    }
复制代码

我把service层省略了

dao层

public interface MyFileDao extends CrudRepository<MyFile, Long> {
}
复制代码

entity

@Entity
public class MyFile {
    
    private Long id;
    private String fileName;
    private byte[] file;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public byte[] getFile() {
        return file;
    }

    public void setFile(byte[] file) {
        this.file = file;
    }
}
复制代码

三、总结

这里只是简单的把文件的二进制存入关系型数据库中,貌似大多数情况下不这样存,我也只是业务的需要才这样处理了。 刚开始的时候我总想着怎么处理流巴拉巴拉一堆,最后起身倒了杯水,不急着找资料,而是站在一个高的视角去审视我的动机,我想干什么,存文件到数据库,二进制,所以我还处理什么锤子流啊,然后一步搞定,这么简答的一个问题花费我几个小时,自己想的复杂了呀。
THINK TWICE,CODE ONCE. 三思而后敲啊!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值