入门级别:idea使用单纯的SpringMVC写的简单的文件上传

第一步:创建项目

     新建一个项目,先点击左边的spring,然后再点击右边的Spring MVC,点击后,下面的Web Application也会自动勾上,然后点击下一步Next,然后是给项目起名字以及配置项目目录,成功后,点击finish。需要加载一会儿。

 

第二步:配置项目

      配置Tomcat

      点击最上面一排目录的run,然后点击Edit Configurations,弹出一个页面,点击左上角的Templates旁边的小三角,然后翻到最底下,点开Tomcat Server,再点击Local,然后点击右上角的Configure....按钮,配置你的Tomcat,然后点击右下角apply按钮,别关闭此页面,然后点击左上角的加号+,点击最下面一个,然后再点开Tomcat Server,再点击Local,然后点击右边apply按钮上面的fix按钮,然后点击apply,关闭这个界面。

      导入jar包

    点击File按钮,然后点击Project  Structure...这个按钮,弹出一个页面(这个页面分为左中右三部分),左边选中 Artifacts,然后点击最右部分的 Output.Layout ,然后点击它下面的一个加号+,选择Library Files,然后选中其中的两个jar包,并点击OK;接着点击apply上面的fix按钮,点击Add all...开头的那一行(我的是第二行),然后点击apply按钮。

    然后最左部分选中Modules,然后点击最右部分的加号+,选择第一个,在弹出的页面里选择要添加的jar包,这一步可以反复操作,把所需要的jar包都添加上。然后点击apply,不要关闭该页面。

    接下来点击最左侧的Artifacts,发现有警告,点击左侧apply按钮上面的fix按钮,选择第二个Add all...开头的,然后点击OK,关闭掉这个界面。jar包就添加成功了。

       配置Spring-MVC.xml文件(idea中是dispatcher-servlet.xml文件)

先添加这个:
<context:component-scan base-package=" 你的package名 "/>
再添加这个:
<mvc:annotation-driven/>

     

上传文件就必须配置上传文件所需要的东西。(直接将下面这段话copy进去就可以)

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8" />
    <property name="maxUploadSize" value="10240000" />
    <!-- 设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240 -->
    <!-- 但是经实验,上传文件大小若小于此参数,则不会生成临时文件,故改为2048 -->
    <property name="maxInMemorySize" value="2048" />
</bean>

     注意name为 “maxInMemorySize”的这个property,如果你上传的文件的大小小于2048kb,则不会生成临时文件,这个你可以根据需求改变一下,在我的项目中,我把它改为了10,就是把value的值改为“10”。

      配置web.xml文件

      首先把web.xml文件中的下面这部分  修改一下。

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.form</url-pattern>    改为: <url-pattern> / </url-pattern>
</servlet-mapping>

    修改后为:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

    

       接着,由于上传之后,我们要验证文件是否上传成功了,我们就需要访问上传到该项目的文件,这个文件是一个静态文件,为了能够访问这个静态文件,就需要添加相应的配置,SpringMVC访问静态文件,有多种方法,我自己用的是最笨的一种,因为我也是新手。方法如下:

      将下面的内容copy到web.xml文件中,要放在<web-app>标签之间啊。

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.xml</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.swf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.zip</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

      这样,常用的静态文件格式就都可以访问了,这个很简单,一看就会,你看还需要添加什么样的格式,可以自己添加。

      已经说了,我这种办法是最笨的办法,你可以使用别的方法,只要能让SpringMVC访问到静态资源就可以。

 

第三步:创建controller类

     在src下创建一个controller的package,然后在其中添加一个FileUploadController类,具体代码如下:

package 。。。。。。

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;

@Controller
public class FileUploadController {

    @RequestMapping("/upload")
    public String uploadFile(@RequestParam("file1") MultipartFile file1,HttpServletRequest request) throws Exception{
        String filePath=request.getServletContext().getRealPath("/");
        System.out.println(filePath);
        file1.transferTo(new File(filePath+"123/"+file1.getOriginalFilename()));
        return "redirect:success.html";
    }

}

        其中,@RequestParam("file1") 表示,前端的form表单中的 type类型的的input 的name为file1,为了一致,我把后面的MultipartFile类型的参数也设置为了file1。

        String filePath=request.getServletContext().getRealPath("/");  返回的是项目在容器中的实际发布运行的根路径;

        file1.transferTo(new File(filePath+"123/"+file1.getOriginalFilename()));  其中的file1.getOriginalFilename(),是获取上传的文件的本来的名称。所以这行代码的意思就是将这个上传后的文件放到 根目录的“123”目录下,并且名称为以前的名称。(之所以使用123作为目录的名称,是因为之前使用英文名称的时候,可能由于编码的问题,出现了差错,可以换成别的名称) 因此,需要在web(webapp)目录下创建一个名为123的空目录。

        在根目录即web(webapp)中创建一个名为“123”的空目录。

      上传成功后,会重定向到 success.html界面,因此还要在根目录(web或webapp)添加一个success.html文件。内容自己随便写。

第四步 添加前端页面

    idea创建的项目默认有一个index.jsp文件,我就把上传的前端页面写在这个文件里了

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
    <table>
      <tr>
        <td colspan="2">文件上传</td>
      </tr>
      <tr>
        <td>第一个文件</td>
        <td>
          <input type="file" name="file1" id="file1"/>
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <input type="submit" value="上传文件"/>
        </td>
      </tr>
    </table>
  </form>
  </body>
</html>

      form标签的action属性最好写成绝对路径,因为要上传文件,所以还需要加上enctype="multipart/form-data" 属性,另外,选择文件的<input>标签的name属性必须与controller类中的 @RequestParam("file1") 相同。应该再没有什么要注意的了。

 

 

这就应该差不多了。

 

刚才又实践了一遍这个文件上传的功能,果然又获取到了点东西,我之前在web目录下创建一个upload目录,然后让上传功能将文件上传到这个目录中去。我刚才这样做了一遍,发现出错了,然后我就输出获取到的文件的路径,然后直接在本地文件中打开,发现,真正的本地路径并不是在web下,而是在out路径下,而我创建的upload在web中,所以获取到的路径中根本就没有这个目录,所以一直都报找不到路径。

解决办法:我手动在获取到的路径下创建了一个upload目录,这样就好了。看来我上次是运气好,才实现了那个功能。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值