SpringMVC 文件上传 MultipartFile、CommonsMultipartResolver

来源:互联网 发布:swift开发windows程序 编辑:程序博客网 时间:2024/05/20 15:39

首先做一个概括,上传文件/上传图片   到 ftp服务器的步骤是(以我做的一个简单的上传头像的例子讲解,也就是简单的上传文件):

1.上传、接收文件(有很多方式,我主要介绍一下我用到的方式是:SpringMVC 用的是 的MultipartFile来进行文件上传

2.登录远程ftp服务器保存文件
3.上传文件到ftp


主要的就这三个步骤,下面看看具体实现方式;

一、上传、接收文件

  1.要用SpringMVC 用的是 的MultipartFile来进行文件上传,首先要配置MultipartResolver:用于处理表单中的file

     <!-- 支持上传文件 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
        <!--10*1024*1024即10M -->
        <property name="maxUploadSize" value="10485760" />
        <!--resolveLazily属性启用是为了推迟文件解析,以便在UploadAction 中捕获文件大小异常 -->
        <property name="resolveLazily" value="false" />
    </bean>

  2.前台配置上上传:

主要要给他设置这个属性(enctype="multipart/form-data" )标识他是用MultipartFile上传的,name="licenceFile"能表示图片是哪个,后台能接收到,可以用这个属性来标识图片具体是那个。

   <form id="register-form" enctype="multipart/form-data" action="../company/multi_upload" method="post">'

        <li>'
            <font class="required">*</font>'+
              <span>代理记账许可证</span>'+
              <input type="text" class="register-agencyText" id="register-agencyText" placeholder="只支持png, jpg, jpeg, gif格式文件"/>'+
               <input type="hidden" name="file2" class="register-agencyFlieName" id="register-agencyFileName"/>'+
                <input type="file" name="licenceFile" class="register-agencyFlie" id="register-agencyFile"/>'+
          </li>'

  <form>
3.后台接收:

    ①controller(也就是请求的那个action层,我用的是Springmvc):

      注意: @RequestParam(value="headProtrait",required=false) MultipartFile[] files 接收的到的是一个MultipartFile数据,当然也可以用MultipartFil对象(在一个的情况下)

    @Controller
   @RequestMapping(IUrlDef.company_userPhoto)
public class CompanyUserPhotoController extends RockAbstractController {
    private static final String URL_NAME = "company_userPhoto";

    @Autowired
    private CompanyUserPhotoService service;
    
    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public Object doPost(@RequestParam(value="headProtrait",required=false) MultipartFile[] files ,HttpServletRequest request,HttpServletResponse response, Model model
             ) throws InvocationTargetException {


        params.put("file", files);//这里存好接收到的图片数据
        return response(this.service, "doPost", params, model);
        }
    }
}
   ②.service层的处理方式:

       service层接收,处理就好了:MultipartFile[] files = (MultipartFile[]) urlParams.get("file");

      上传到ftp: FileMessage fileMessage = sftpFileOper.upSftpFileCommon(imgName, input, tarPath);


     接受图片,做接受处理,并上传sftp:

     public JSONObject setUserHead(Map<String, Object> urlParams,Map<String, String> reqParams,
            TuUser tuUser,TuAccountAvatarMapper  avatarMpper,Boolean flag){
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("code", 1);
        jsonObj.put("msg", "设置头像失败");

        MultipartFile[] files = (MultipartFile[]) urlParams.get("file");
        String imgName = "";// 图片名称
        String tarPath = "";// 图片最终保存的路径

        MultipartFile file = null;
        int FileLength = files.length;
        if (files != null && FileLength > 0) {
            // 循环获取file数组中得文件
            for (int i = 0; i < FileLength; i++) {
                file = files[i];
                imgName = file.getOriginalFilename();// 上传的文件名称
                InputStream input;
                try {
                    input = file.getInputStream();
                    tarPath = ReadPropertyUtil.getUrlByKey("userPhotoPath") + tuUser.getId();// 文件上传到的路径位置
                    jsonObj = saveOrUpdateUserPhto(input, imgName, tarPath, tuUser.getUsername(), avatarMpper,
                            reqParams, flag);
                } catch (Exception e) {
                    LOG.e(e.toString());
                }
            }
        }
         return jsonObj;
    }

上传sftp并保存记录:

public JSONObject  saveOrUpdateUserPhto(InputStream input,String imgName,String tarPath,String userName,TuAccountAvatarMapper  avatarMpper,Map<String, String> reqParams,Boolean flag) {
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("code", 1);// 默认失败
        int successflag = 0;
        try {
            SftpFileOper sftpFileOper = new SftpFileOper();
            FileMessage fileMessage = sftpFileOper.upSftpFileCommon(imgName, input, tarPath);// 完成数据提交上传到ftp服务器
            String fileName = fileMessage.getFileName();
            if (fileMessage.getStatus() == 200) {
                if (flag) {
                    // 新增
                    successflag = addUserHeadData(avatarMpper, tarPath, fileName, userName, reqParams);
                } else {
                    // 修改
                    successflag = updateUserHeadData(avatarMpper, tarPath, fileName, userName, reqParams);
                }
                if (successflag > 0) {
                    jsonObj.put("code", 0);
                    jsonObj.put("msg", "设置头像成功");
                }
            }
        } catch (Exception e) {
            LOG.e(e.toString());
        }
        return jsonObj;
    }

      上传到ftp的方法:

public FileMessage upSftpFileCommon(String fileName, InputStream inputstream, String directory)
    throws Exception
  {
    SftpClientUtil sftpClientUtil = sftpConnection();

    FileMessage fileMessage = sftpClientUtil.upload(directory, inputstream, fileName);
    inputstream.close();
    sftpClientUtil.disconnect();
    return fileMessage;
  }

0 0
原创粉丝点击