页面FormData形式传表单数据和同时上传文件方法

一、前言

    首先,要明确一点。即,通过formdata形式上传表单和文件的方式,每一个表单必须有name属性,否则无法获得参数,此处要注意input表单是file的,只需要一个name,并且后台不要用某个成员变量去接值,否则报错一般是405;

    第二,笔者项目前端请求采用的是ajax,必须在此处请求处加上两个属性。分别是:processData : false和contentType : false。若没有这两个属性,会造成乱码、异常等现象;无法获取各参数;

二、工具类方法

2.1 底层方法

/**
* 上传文件(可供Action/Controller层使用)

* @param hostname
*            FTP服务器地址
* @param port
*            FTP服务器端口号
* @param username
*            FTP登录帐号
* @param password
*            FTP登录密码
* @param pathname
*            FTP服务器保存目录
* @param fileName
*            上传到FTP服务器后的文件名称
* @param inputStream
*            输入文件流
* @return
*/
public static boolean uploadFile(String hostname, int port, String username, String password, String pathname,
String fileName, MultipartFile inputStream) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("UTF-8");// 设置编码
try {
ftpClient.connect(hostname, port);// 连接FTP服务器
ftpClient.login(username, password);// 登录FTP服务器
int replyCode = ftpClient.getReplyCode();// 是否成功登录FTP服务器
if (!FTPReply.isPositiveCompletion(replyCode)) {
return flag;
}
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 文件类型设为二进制文件
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);// 切换工作路径
InputStream in = inputStream.getInputStream();
ftpClient.storeFile(fileName, in);// 开始上传
in.close();
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;

}

2.2 上传主方法

      /**
* @description fromData传参的FTP上传方式,可以适用本方法
* @history_version 1.0
* @param request 页面传进来的请求
* @return  存储的(绝对)路径
*/

public static String uploadFile(HttpServletRequest request){
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());
int tempi=0;
String imgUrl="";
if(multipartResolver.isMultipart(request)){
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest) request;
Iterator iter= multiRequest.getFileNames();
while(iter.hasNext()){
MultipartFile file=multiRequest.getFile(iter.next());
if(!file.isEmpty()){
tempi++;
String imgName=file.getOriginalFilename();
String imgType = imgName.substring(imgName.lastIndexOf("."));
String filename = tempi +StringUtil.getOrderNum("") + imgType;
String ftpIp = ParamSettingUtil.getFtpIp();
        int ftpport = ParamSettingUtil.getFtpport();
        String username = ParamSettingUtil.getFtpusername();
        String password = ParamSettingUtil.getFtppassword();
        String serviceUrl = ParamSettingUtil.getServiceurl();
        String imgRootPath = ParamSettingUtil.getPayImgPath();
String imgPath = imgRootPath;
        uploadFile(ftpIp, ftpport, username, password, imgPath, filename, file);
imgUrl=imgUrl+serviceUrl+imgPath+filename+",";
}
}
if(imgUrl.length()>2){
return imgUrl.substring(0,imgUrl.length()-1);
}
}
return null;

}

三、补充

后台接受参数的形式如下:

@RequestMapping(value="/saveOpenCountInfo")
@ResponseBody

public Tidings saveOpenCountInfo(...Entity entity,HttpServletRequest request, HttpSession session){.........}

你可能感兴趣的:(BYHJ)