Java文件文件处理— web项目的文件上传下载实战

一,导入pom依赖

		<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

二,MultipartFile的常用方法

上传文件时

	MultipartFile file;
	String oldfilename =file.getOriginalFilename();//得到file的原始文件名字

	String ext = "."+FilenameUtils.getExtension(file.getOriginalFilename());//得到文件的.后缀

	String newfilename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ UUID.randomUUID().toString().replace("-","")+ext;//编辑文件的新文件名称

	long size = file.getSize();//得到文件的大小

	String type = file.getContentType();//得到文件的类型

	String url = "E:/idea_project";
    String dataFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    String dataDirPath = url+"/"+dataFormat;
    File files = new File(dataDirPath);
    if (!files.exists()) files.mkdirs();//是否存在当前路径的文件,不存在就创建

	file.transferTo(new File(files,newfilename));//将文件以newfilename为名放入files文件夹下


文件下载时

		//获取文件信息  实体类userfile
        Files userfile = filesService.findById(id);
      	//根据文件信息和文件存储路径获取文件输入流
        String url = userfile.getPath()+"/"+userfile.getNewfilename();
        
        //附件形式下载
        response.setHeader("Content-Disposition","attachment;fileName="+ userfile.getNewfilename());
        
		//获取文件输入流
        FileInputStream inputStream = new FileInputStream(new File(url));

        //获取相应输出流
        OutputStream outputStream = response.getOutputStream();

        //文件拷贝
        IOUtils.copy(inputStream,outputStream);
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(outputStream);

三,controller类

@RestController
@RequestMapping("files")
public class filesController {
    @Autowired
     private FilesService filesService;

    @GetMapping("download")
    public void download(@Param("id") Integer id, HttpServletResponse response) throws IOException {
        //获取文件信息
        Files userfile = filesService.findById(id);
        //根据文件信息和文件存储路径获取文件输入流
        String url = userfile.getPath()+"/"+userfile.getNewfilename();
        System.out.println(url);//
//        String realpath = ResourceUtils.getURL(url).getPath();
//        System.out.println(realpath);//

//        response.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode(userfile.getOldfilename(), "UTF-8"));
        //附件形式下载
        response.setHeader("Content-Disposition","attachment;fileName="+ userfile.getNewfilename());
        //获取文件输入流
        FileInputStream inputStream = new FileInputStream(new File(url));
//        ServletOutputStream outputStream = response.getOutputStream();
        //获取相应输出流
        OutputStream outputStream = response.getOutputStream();
        //文件拷贝
        IOUtils.copy(inputStream,outputStream);
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(outputStream);
//        int b;
//        while((b=inputStream.read())!= -1)
//        {
//            outputStream.write(b);
//        }
//
//        inputStream.close();
//        outputStream.close();
    }

    @PostMapping("showAll")
    @ResponseBody
    public Result findAll(HttpServletRequest request){
        String token = request.getHeader("token");
        DecodedJWT verify = JWTUtils.verify(token);
        System.out.println(token);
        int id = Integer.valueOf(verify.getClaim("id").asString());
        List<Files> files = filesService.findByUserId(id);
        return Result.succ(files);
    }
    @PostMapping("upload")
    public Result upload(@RequestParam("file") MultipartFile aaa, HttpSession session) throws IOException {
        User user = (User) session.getAttribute("user");
        String oldfilename = aaa.getOriginalFilename();
        String ext = "."+FilenameUtils.getExtension(aaa.getOriginalFilename());
        String newfilename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ UUID.randomUUID().toString().replace("-","")+ext;
        System.out.println(newfilename);
        long size = aaa.getSize();
        String type = aaa.getContentType();
        String url = "E:/idea_project";
//        String realpath = ResourceUtils.getURL(url).getPath();
        String dataFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String dataDirPath = url+"/"+dataFormat;
        File file = new File(dataDirPath);
        if (!file.exists()) file.mkdirs();

        aaa.transferTo(new File(file,newfilename));

        Files files = new Files();
        files.setOldfilename(oldfilename);
        files.setNewfilename(newfilename);
        files.setType(type);
        files.setSize((int) size);
        files.setPath(dataDirPath);
        files.setId(user.getId());
        filesService.save(files);
        return Result.succ("保存成功");
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值