Springmvc实现文件上传

Springmvc实现文件上传

pom.xml中引入jar包

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <!--锁定spring的版本-->
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <!--   引入 JSON解析器-->

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>
    <!--上传文件所需jar包-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <!--  跨服务器上传     -->
    <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>

  </dependencies>

前台页面

<%--文件上传enctype类型要修改为multipart/form-data 提交方式必须为post--%>
    <form action="${pageContext.request.contextPath}/upload/uploadfile" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br />
<%--这里的name要和后台调用的name相同--%>
        <input type="submit" value="上传文件" />
    </form>

Springmvc.xml的配置

<!--开启组件的注解扫描-->
    <context:component-scan base-package="org.westos"/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
        <!--prefix 前缀  suffix 后缀 拼完成就是 /WEB-INF/success.jsp 因为我们返回的是一个success这个字符,然后再拼接上我们配置的前缀和后缀,就可以跳转到success.jsp这个页面-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--配置静态资源不被拦截-->
    <mvc:default-servlet-handler/>
    <!--配置文件解析器的对象,要求id名称必须是multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--  限制上传文件的大小 单位是kb     -->
        <property name="maxUploadSize" value="#{1024*1024*100}"/>
    </bean>
    <!--开启springmvc的注解驱动-->
    <mvc:annotation-driven/>

web.xml的配置

<!--配置springMVC的核心控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

后台代码的编写

@Controller
@RequestMapping("/upload")
public class uploadController {
        @RequestMapping("/uploadfile")
        public String uploadFile2(HttpServletRequest request, MultipartFile upload) throws Exception {
            //获取服务器的真实路径
            String filePath = request.getSession().getServletContext().getRealPath("/upload");
            System.out.println(filePath);
            //判断该服务器端的uploads是否存在,不存在就创建
            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            //1.获取上传的文件名称
            String filename = upload.getOriginalFilename();
            //2.上传文件
            upload.transferTo(new File(file,filename));

            return "sucess";
    }
}
SpringMVC跨服务器方式文件上传
在实际开发中,我们会有很多处理不同功能的服务器。例如: 
  应用服务器:负责部署我们的应用 
  数据库服务器:运行我们的数据库 
  缓存和消息服务器:负责处理大并发访问的缓存和消息 
  文件服务器:负责存储用户上传文件的服务器。 

这个项目不需要编写任何代码,他是充当一个文件服务器 比如我们项目名是 fileupload_server

在应用服务器上,实现SpringMVC跨服务器方式文件上传,需要引入下面两个jar包

  <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>

通过注释可以看到默认情况下当我们进行put或者delete操作的时候,服务器是拒绝访问的,所以想向服务器上传文件必须将readonly属性设置为false

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <!-- 添加,解决jersey上传服务器403错误 -->
    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
编写后台代码:
@Controller
@RequestMapping("/upload")
public class UploadController{
    @RequestMapping("/uploadfile")
    public String uploadFile3(MultipartFile upload) throws Exception {
        // 1.定义图片服务器的请求路径
        String path = "http://localhost:9090/fileupload_server/uploads/";
        // 2.获取到上传文件的名称
        String filename = upload.getOriginalFilename();
        System.out.println(filename);
        //3.向文件服务器,上传文件
        //3.1 创建客户端
        Client client = Client.create();
        //3.2 连接图片服务器
        WebResource resource = client.resource(path + filename);
        //3.3 上传文件 注意文件名不要含有中文,否则报错
        resource.put(upload.getBytes());

        return "success";
    }
 }
 需要我们在图片服务器的fileupload_server项目中的target/fileupload_serve下自己创建一个uploads 目录
 如果我们不配置项目路径,那么图片
  String path = "http://localhost:9090/uploads/"; 也就是没有配置项目路径
  那么图片就上传在tomcat服务器的Root文件夹下 
要在Spring MVC中实现文件上传,你需要进行以下几个步骤: 1. 引入依赖:在项目的pom.xml文件中,添加对Spring MVC和文件上传组件的依赖。 2. 在前端编写一个包含文件上传功能的form表单:在HTML页面中,使用form表单标签,并设置属性enctype="multipart/form-data",并添加一个type为file的input标签,用于选择要上传的文件。 3. 在Spring MVC的配置文件中配置文件上传器:在Spring MVC的配置文件(通常是一个XML文件)中,添加一个bean,其id为multipartResolver,类为org.springframework.web.multipart.commons.CommonsMultipartResolver。这是Spring提供的一个文件上传解析器。 4. 在Controller中处理文件上传:在Spring MVC的Controller中,添加一个方法用于处理文件上传的请求。该方法需要添加一个参数,用于接收上传的文件。在方法中,你可以通过MultipartFile对象来访问上传的文件,并执行相应的操作。 下面是一个示例代码,展示了如何在Spring MVC中实现文件上传: ```java @Controller public class FileUploadController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 处理文件上传的逻辑 if (!file.isEmpty()) { // 获取上传的文件名 String fileName = file.getOriginalFilename(); // 进行处理... return "success"; } else { return "error"; } } } ``` 请注意,上述代码中的"/upload"是文件上传的请求路径,你可以根据自己的需要进行修改。 总结一下,要在Spring MVC中实现文件上传,你需要引入依赖、编写前端form表单、配置文件上传器,并在Controller中处理文件上传的请求。希望这些信息对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringMvc上传文件(详细)](https://blog.csdn.net/weixin_55519875/article/details/128096289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值