SpringMVC 学习笔记心得(七)跨服务器方式上传文件

小编一路学习过来整理了文件上传的演化过程,随着框架的使用,使得文件上传的过程越来越简化方便,也正是因为框架的帮助,使得开发更加的简洁,下面小编整理了整个文件上传的变化过程!


1)、普通文件上传

1.普通文件上传代码如下

 @RequestMapping("/testFileUp")
    public String testFileUp(HttpServletRequest request) throws Exception {

        // 获取原生真实路径
        String realPath = request.getSession().getServletContext().getRealPath("/uploads/");

        //创建文件 , 判断是否存在此文件夹
        File file = new File(realPath);
        if(!file.exists()){
            boolean mkdirs = file.mkdirs();
            System.out.println("isCreating? "+mkdirs);
        }
        //打印文件地址便于查看
        System.out.println("file exitst ..." + realPath);

        //配置DiskFile工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //使用Servlet
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        //解析request
        List<FileItem> items =  fileUpload.parseRequest(request);
        //判断文件是什么类型的
        for (FileItem item : items)
            if (item.isFormField()) {
                //普通类型
                String name = item.getFieldName();
                if (name.equals("name")) {
                    //输出表单字段的值
                    System.out.print(item.getString("UTF-8")+"上传了文件。");
                }
   
            } else {
                System.out.println("文件字段");
                //文件类型
                //1.获取文件名字
                String name = item.getName();
                //添加一个随机值与文件名拼串
                String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
                //拼串
                name = s+"_"+name;
                //上传文件
                item.write(new File(realPath, name));
                //删除零食文件
                item.delete();

            }
        return "success";
    }

2)、SpringMVC文件上传

@RequestMapping("/testFileUp2")
    public String testFileUp2(HttpServletRequest request, MultipartFile filename) throws Exception {
        //原生实现文件上传
        // 获取原生真实路径
        String realPath = request.getSession().getServletContext().getRealPath("/uploads/");
        //创建文件 , 判断是否存在此文件夹
        File file = new File(realPath);
        if(!file.exists()){
            boolean mkdirs = file.mkdirs();
            System.out.println("isCreating?"+mkdirs);
        }
        System.out.println("file exitst ..." + realPath);
				//获取到上传文件的名称 == item.getFileName()
                String name = filename.getOriginalFilename();
                String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
                name = s+"_"+name;
                //上传文件
            filename.transferTo(new File(realPath,name));
             
        return "success";

    }
  • 补充:SpringMVC提供了了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同
  • 可以通过配置配置文件的方式限制文件上传限制(ID必须为multipartResolver)
 <!-- 配置文件管理器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="#{1024 * 10 * 100}"/>
    </bean>

3)、跨服务器文件上传

1).文件上传逻辑图

在这里插入图片描述

2).导入jersey坐标,用来实现跨服务器上传

<dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.18.1</version>
    </dependency>
    <dependency>
    <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.18.1</version> 
    </dependency>

3).跨服务器代码实现

@RequestMapping("/testFileUp3")
    public String testFileUp3( MultipartFile upload) throws Exception {

        //自定义路径
        String path = "http://localhost:9090/uploads/";
        //获取文件名
        String name = upload.getOriginalFilename();
        String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
        name = s+"_"+name;

        //创建客户端对象 
       Client client = new Client();//com.sun.jersey.api.client.Client; 注意是jerse包下的Client
        //连接图片服务器
        WebResource webResource = client.resource(path + name);//因为path后面加了 ‘/ ’ 所以这里直接拼接就行了 

        //上传文件
        webResource.put(upload.getBytes());//提交字节上传文件
        return "success";

    }

4).可能会出现的异常

1)、403:return a response status of 403 Forbidden
在这里插入图片描述
原因:在tomcat中,是由于"写入"访问被禁止而造成的,当试图将文件上载到目录或在目录中修改文件,但该目录不允许"写"访问时就会出现此种错误。

解决:修改为可接受传入即可,即将value改为false
在这里插入图片描述

2)、500:org.springframework.web.multipart.MaxUploadsSizeExceedException
在这里插入图片描述
原因:小编之前定义的最大上传文件大小字节为1024*1000所以只有1024000个字节大小,但是图片的大小为1314599个字节大小,所以上传就没有成功,所以这个异常修改上传最大字节即可

解决:修改最大值即可
在这里插入图片描述

5).最终效果图

在这里插入图片描述
上传成功!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43409994/article/details/106387883
今日推荐