Spring mvc上传文件

  1. SpringMVC+表单实现文件上传

 

前端代码:

<form action="userHead" method="post" enctype="multipart/form-data" >

 <input type="file" id="upload" name="upload"/> 

<input type="submit" value="up" οnclick="imgupload()">

</form>

 

服务器端

 

@Controller

public class FileController {

 

         /**

          * 头像上传

          * @param req

          * @param files

          * @return2018年9月12日

          */

         @RequestMapping(value="/userHead")

public String uptx(HttpServletRequest req,@RequestParam(value="upload") MultipartFile file) {

 

                  HttpSession session=req.getSession();

                  User user=(User) session.getAttribute("user");//获取用户数据

                 

                  String abpath="upload/tx/"+user.getPhone()+"/";//构建存储相对路径

                  String path=req.getServletContext().getRealPath(abpath);//获取绝对路径

                 

                 

                  String filename=file.getOriginalFilename();//获取文件名

                 

                  File thisfile=new File(path,filename);

                  if(!thisfile.exists()) {

                          thisfile.mkdirs();

                  }

                 

                  try {

                          file.transferTo(thisfile);

                         

                  } catch (IllegalStateException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  } catch (IOException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  }

                 

                  Return “home”;

         }

        

        

}

 

 

利用表单上传图片到服务器端 用于前端界面为jsp页面的情况,利用model即可向jsp页面返回消息

 

         @RequestMapping(value="/userHead")      

public String uptx

(HttpServletRequest req,@RequestParam(value="upload") MultipartFile file)

 

控制器为userHead;

 

HttpServletRequest req此参数用于下面获取session中的数据

@RequestParam(value="upload") MultipartFile file

 

‘MultipartFile 封装了上载文件的所有信息

 

@RequestParam是对于方法参数的注解,将表单中对应key的值注入参数bean

 

 

                  HttpSession session=req.getSession();

                  User user=(User) session.getAttribute("user");//获取用户数据

 

 

String abpath="upload/tx/"+user.getPhone()+"/";//构建存储相对路径

                  String path=req.getServletContext().getRealPath(abpath);//获取绝对路径

 

 

 

String filename=file.getOriginalFilename();//获取文件名

 

File thisfile=new File(path,filename);

                  if(!thisfile.exists()) {

                          thisfile.mkdirs();

                  }

构建文件路径 如果文件夹不存在 就创建文件

 

Abpath为相对路径,再前端 我们使用域名+文件在服务器端的相对路径来读取图片资源

 

file.transferTo(thisfile);

 

调用multipartFile对象的transferTo()方法把文件存入对应的文件

 

 

SPringMVC+ajax实现文件上传

 

 

常用于移动端和服务器端的交互,异步上传文件

 

以下代码使用ajax上传文件成功后将文件资源返回客户端

 

Html

<img alt="头像" src="#" id="txs" style="width:100px;height:100px">

                                   <form action="userHead" method="post" >

                                <input type="file" id="upload" name="upload"/> 

                                <input type="button" value="up" οnclick="imgupload()">

                                   </form>

 

 

Ajax

 

 

function imgupload(){

   var formData=new FormData();

   formData.append("upload",$("#upload")[0].files[0]);

    $.ajax({ 

         url: 'userHead'

         type: 'POST'

         data: formData, 

         async: true

         cache: false

         contentType: false

         processData: false,

         success: function (returndata) { 

           $("#txs").attr("src",returndata)

         }, 

         error: function (returndata) { 

             alert(returndata); 

         } 

    }); 

}

Ajax使用FormData对象模拟表单对象上传

所以我们取出一个file对象

把它以键值对的形式添加到formData对象中

上载到服务器端

 

SpringMVC

 

 

@Controller

public class FileController {

 

   /**

    * 头像上传

    * @param req

    * @param files

    * @return2018912

    */

   @RequestMapping(value="/userHead")//,consumes = "multipart/form-data"

   @ResponseBody

   public String uptx(HttpServletRequest req,@RequestParam(value="upload") MultipartFile file) {

     

     

      HttpSession session=req.getSession();

      User user=(User) session.getAttribute("user");//获取用户数据

     

      String abpath="upload/tx/"+user.getPhone()+"/";//构建存储相对路径

      String path=req.getServletContext().getRealPath(abpath);//获取绝对路径

     

     

      String filename=file.getOriginalFilename();//获取文件名

     

      File thisfile=new File(path,filename);

      if(!thisfile.exists()) {

          thisfile.mkdirs();

      }

     

      try {

          file.transferTo(thisfile);

         

      } catch (IllegalStateException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      } catch (IOException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      }

     

      return abpath+filename;

   }

  

  

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值