- 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
* @return2018年9月12日
*/
@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;
}
}