百度云(BAE)文件上传目录问题-yellowcong
  Hlmk1dDVrQDy 2023年11月02日 56 0


我是14年左右开始用的百度云,当时云的概念刚刚起来,我用过京东云(JAE),新浪云(SAE),百度云(BAE),其中我觉得SAE和BAE是做得比较不错的PaaS(平台即服务),我这篇,主要将百度文件上传问题,在BAE中,我们不可以直接获取到绝对路径,用户能操作的只有/home/bae/apptemp连个文件夹了

这个是百度官方API上面的说明

百度云(BAE)文件上传目录问题-yellowcong_百度

百度云(BAE)文件上传目录问题-yellowcong_百度_02

文件上传后,目录结构

对于Java的项目,我们需要打包成ROOT.war 包来操作,其中在BAE 中,用户可以操作的目录是/home/bae/app/下所有的数据,然而,我们将ROOT.war上传后,我们的应用名称,就编程了 app

百度云(BAE)文件上传目录问题-yellowcong_百度云_03

上传后我们的目录结构就是,下面这个样子了
/home/bae/app
        META-INF
        resources
        WEB-INF
        index.jsp

上传文件到/home/bae/app

上传到网站的跟路径,session.getServletContext().getContextPath()获取到当前项目的相对路径,然后和我们的/home/bae/app拼接,就得到了静态文件的绝对路径。

String path = "/home/bae/app/"+session.getServletContext().getContextPath();

例子

这是以前的代码,采用的是SpringMVC的框架

@RequestMapping(value="/upload",method=RequestMethod.POST)
public String upload(MultipartFile file,HttpSession session,Model model) {
    try {
    //获取路径
    //String path = session.getServletContext().getRealPath("/resources");
//      System.out.println(path);
    //上传到网站的跟路径
    String path = "/home/bae/app/"+session.getServletContext().getContextPath();
    String fileName = path+"/resources/"+file.getOriginalFilename();
    FileUtils.copyInputStreamToFile(file.getInputStream(), new File(fileName));
    System.out.println("上传路径名称\t"+fileName);
    model.addAttribute("sysPath", fileName);
    model.addAttribute("name",file.getOriginalFilename());
    } catch (Exception e) {
         throw new RuntimeException(e.getMessage());
    }
    return "user/show";

}

图片访问

我们可以直接通过链接http://xxx/resource/xx.jpg访问图片资源,xxx是我们自己的网站名称,resource/xx.jpg是资源存放地址+文件名称

http://xxx/resource/xx.jpg

百度云(BAE)文件上传目录问题-yellowcong_java_04

将文件上传到app目录下以后,当我们再次访问resource的jsp文件的时候,这个目录的静态文件将不能访问。

文件写入到temp目录

我们不能直接将文件写入到 app目录下,但是我们可以写入到temp目录后(也可以不写到temp目录下,直接操作MultipartFile,上传到别的服务器上 ),然后将图片传到别的服务器上,比如七牛云,或者是百度自己的BOS(对象存储中)

@RequestMapping(value="/upload2JAE",method=RequestMethod.POST)
public String upload2JAE(MultipartFile file,HttpSession session,Model model) {
    try {
        //获取路径
//          String path = session.getServletContext().getRealPath("/resources");
//          System.out.println(path);
        //百度中可以操作的目录是  tmp 和 bae/app
        String fileName = "/tmp/"+file.getOriginalFilename();
//          模仿我们在百度上的
//          String fileName = "D:/tmp/"+file.getOriginalFilename();
        //将数据写入到我们的硬盘中 temp 目录汇总
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(fileName));
        //新的文件
        InputStream in = new FileInputStream(fileName);
        String path = JAEUtils.upload(in,file.getSize(),file.getOriginalFilename());
        System.out.println(path);

        model.addAttribute("sysPath", fileName);
        model.addAttribute("name",file.getOriginalFilename());
        model.addAttribute("path", path);
    } catch (Exception e) {
         throw new RuntimeException(e.getMessage());
    }

    return "user/show";

}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Hlmk1dDVrQDy