文件上传(springmvc和springboot中的用法)

MultipartFile文件的上传
这篇文章中说道:
文件保存路径 :String filePath = request.getSession().getServletContext().getRealPath("/")

+ “upload/” + file.getOriginalFilename();

上传文件原名:file.getOriginalFilename();

转存文件 :file.transferTo(new File(filePath));

下面是我学习过程中看到的两个写法:
1.

@Controller
public class UploadController {
    @RequestMapping("/uploadImage")
    public ModelAndView upload(HttpServletRequest request, UploadedImageFile image) throws IOException {
        String name= RandomStringUtils.randomAlphanumeric(10);
        String newFileName=name+".jpg";
        File file=new File(request.getServletContext().getRealPath("/image"),newFileName);
        file.getParentFile().mkdirs();
        image.getImage().transferTo(file);

        ModelAndView modelAndView=new ModelAndView("showUploadedFile");
        modelAndView.addObject("imageName",newFileName);
        return modelAndView;
    }
}
@RequestMapping(value = "upload",method = RequestMethod.POST)
    public String upload(HttpServletRequest req, @RequestParam("file") MultipartFile file, Model m)  {

        try {
            String filename=System.currentTimeMillis()+file.getOriginalFilename();
            String destFileName=req.getServletContext().getRealPath("")+"uploaded"+ File.separator+filename;


            System.out.println("req.getServletPath() = " + req.getServletContext());
            System.out.println("req.getServletContext().getRealPath() = " + req.getServletContext().getRealPath(""));

            File destFile=new File(destFileName);
            destFile.getParentFile().mkdirs();
            file.transferTo(destFile);
            m.addAttribute("filename",filename);
        }catch (FileNotFoundException e){
            e.printStackTrace();
            return "上传失败,"+e.getMessage();
        }catch (IOException e){
            e.printStackTrace();
            return "上传失败,"+e.getMessage();
        }
return "showImg";
    }

这是第二种写法的输出:在这里插入图片描述
可以总结:
获取文件的真是路径:request.getServletContext().getRealPath("")
上面三种写法虽然都大同小异,对比如下:

File file=new File(request.getServletContext().getRealPath("/image"),newFileName);
String destFileName=req.getServletContext().getRealPath("")+"uploaded"+ File.separator+filename;

可以看到getRealPath("")后面跟内容的话可以直接写+“uploaded"或者”/uploaded"或者这届写getRealPath("/uploaded")

获取真实路径后就可以先将其父目录生成,比如上面的upload目录
在这里插入图片描述
此时就用:
file.getParentFile().mkdirs();生成存文件的父目录
然后用spring提供的transferTo将上传的文件复制到那个目录

 File file=new File(request.getServletContext().getRealPath("/image"),newFileName);
        file.getParentFile().mkdirs();
        image.getImage().transferTo(file);

这里上面(就我学习的两个项目)出现了两种写法:一个是这种将父路径与子路径分开写:

String name= RandomStringUtils.randomAlphanumeric(10);
        String newFileName=name+".jpg";
        File file=new File(request.getServletContext().getRealPath("/image"),newFileName);

一个是这种写在一起:

 String filename=System.currentTimeMillis()+file.getOriginalFilename();
            String destFileName=req.getServletContext().getRealPath("")+"/uploaded"+ File.separator+filename;

            System.out.println("req.getServletContext().getRealPath() = " + req.getServletContext().getRealPath(""));

            File destFile=new File(destFileName);

我估计是有这个File.separator分隔符的作用,然后可以识别这个路径的父目录,从而创建。

我觉得以后写的话还是将父目录与子目录分开写,不容易出错,于是我按照这种风格改了下,测试也没有错:

 /* 注释的部分是springboot上面的,下面的是我按照之前在springmvc教程中的样子改的,经测试无问题*/
            /*String filename=System.currentTimeMillis()+file.getOriginalFilename();
            String destFileName=req.getServletContext().getRealPath("")+"/uploaded"+ File.separator+filename;

            System.out.println("req.getServletContext().getRealPath() = " + req.getServletContext().getRealPath(""));

            File destFile=new File(destFileName);
            destFile.getParentFile().mkdirs();
            file.transferTo(destFile);
            m.addAttribute("filename",filename);*/

            String filename=System.currentTimeMillis()+file.getOriginalFilename();
            String directroy=req.getServletContext().getRealPath("/uploaded");
            File destFile=new File(directroy,filename);
            destFile.getParentFile().mkdirs();
            file.transferTo(destFile);
            m.addAttribute("filename",filename);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值