1 编写一个文件上传的页面
post 包含文件上传的控件 type="file"
FormData 类型的参数进行文件和普通数据的传递
当然ajax 还要进行 contentType:false processData:false
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
function sendAJAX(){
var fdata = new FormData();
fdata.append("acc_no",$("#acc_no").val());
fdata.append("mf",$("#mf")[0].files[0]);
$.ajax({
url:"register2.do",
type:"post",
success:function(imgPath){
$("#showImg").attr("src",imgPath);
},
data:fdata,
contentType:false,
processData:false
});
}
</script>
</head>
<body>
<img alt="" id="showImg"
src="imgs/94d0e152-e2a2-4a91-8a1a-2cb3f43bea2b.png" width="200px"> <br>
账号:<input type="text" name="acc_no" id="acc_no"> <br>
头像:<input type="file" name="mf" id="mf" > <br>
<input type="button" value="上传" οnclick="sendAJAX()">
</body>
</html>
2 编写一个文件上传的控制器
在这个控制器中 需要解析 http请求 解析http请求需要借助第三方jar包
把文件数据和非文件数据解析出来 写到对应的磁盘位置
把图片的路径以字符串 写回即可
// 构建一个磁盘文件条目工厂对象
DiskFileItemFactory sfif = new DiskFileItemFactory();
// 构建servlet文件上传对象
ServletFileUpload sfu =
new ServletFileUpload(sfif);
try {
// 解析http 请求
List<FileItem> items = sfu.parseRequest(request);
for(FileItem it : items){
// 判断是不是文件数据
if(it.isFormField()){
// 这是非文件数据
System.out.println(it.getFieldName()+":"
+it.getName() +":"+ it.getString());
}else{
// 就是文件数据
System.out.println(it.getFieldName()+":"
+it.getName() +":"+ it.getSize());
// 获取你的原始文件名
String oFileName = it.getName();
// 获取文件对应的后缀 a.txt.txt.png
String suffix = oFileName.substring(
oFileName.lastIndexOf("."));
String uFileName = UUID.randomUUID().toString();
String fileName = uFileName + suffix;
// 获取imgs 文件夹 真实的磁盘路径
String realPath = request.getServletContext().getRealPath("imgs");
File file = new File(realPath+"/"+fileName);
it.write(file);
// 把图片的相对路径以字符串写回
PrintWriter pw = response.getWriter();
pw.write("imgs/"+fileName);