ajax上传文件及servlet接收
html
<div class="form-group">
<label class="col-sm-2 control-label"><span style="color:red">*</span>附件上传:</label>
<div class="col-sm-2">
<span>证件正面</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"></label>
<div class="col-sm-2">
<input type="file" name="file" id="per_uploadFront"/>
</div>
</div>
<script type="text/javascript">
function FromData(){}
//创建fileLoad方法用来上传文件
function fileLoad(ele,id,remark){
//创建一个formData对象
var formData = new FormData();
//获取传入元素的val
var fileName = $(ele).val();
//获取files
var file = $(ele)[0].files[0];
//将name 和 files 添加到formData中,键值对形式
formData.append("file", file);
formData.append("fileName", fileName);
formData.append("remark",remark);
$.ajax({
url: "<%=controller.getURI(request, UploadFile.class)%>",
type: 'POST',
data: formData,
async: false,
cache: false,
processData: false,// 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
// beforeSend: function () {
// //发送前的动作
// alert("还没开始发送呢");
// },
success: function (responseStr) {
var resData = eval('('+responseStr+')');
if('CG'==resData.code){
alert("上传成功"+resData.info);
}else{
alert("上传失败"+resData.info);
}
},
error : function (responseStr) {
//出错后的动作
alert("上传失败");
}
});
}
window.onload = function(){
var $per_inputFront = $("#per_uploadFront");
//为input设定change事件
$per_inputFront.change(function () {
//如果value不为空,调用文件加载方法
if($(this).val() != ""){
fileLoad(this,'per_frontKey','证件正面');
}
})
}
</script>
servlet接收
public class UploadFile extends HttpServlet{
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(!isMultipart){
throw new RuntimeException("请检查您的表单的enctype属性,确定是multipart/form-data");
}
DiskFileItemFactory dfif = new DiskFileItemFactory();
ServletFileUpload parser = new ServletFileUpload(dfif);
parser.setFileSizeMax(2*1024*1024);//设置单个文件上传的大小
parser.setSizeMax(10*1024*1024);//多文件上传时总大小限制
List<FileItem> items = null;
try {
items = parser.parseRequest(request);
}catch(FileUploadBase.FileSizeLimitExceededException e) {
out.write("上传文件超出了2M");
return;
}catch(FileUploadBase.SizeLimitExceededException e){
out.write("总文件超出了10M");
return;
}catch (FileUploadException e) {
e.printStackTrace();
throw new RuntimeException("解析上传内容失败,请重新试一下");
}
String fileName = null;
InputStream inputStream = null;
StringBuilder remark = new StringBuilder();
if(items!=null){
for(FileItem item:items){
if(!item.isFormField()){
// 该表单项是file类型的
fileName = item.getName();
inputStream = item.getInputStream();
}else {
//该表单项是普通类型的
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");
remark.append(fieldName+":"+fieldValue+",");
}
}
}
Map<String,Object> returnMap = new HashMap<String, Object>();
/**校验上传文件的大小*/
int available = inputStream.available(); //文件大小byte
//1M=1024k=1048576字节
if(available > 2*1048576) { //文件不能大于2M
returnMap.put("code","SB");
returnMap.put("info", "文件不能大于2M");
out.print(new JSONObject(returnMap));
out.close();
return;
}
returnMap.put("code","CG");
returnMap.put("info", "上传成功");
out.print(new JSONObject(returnMap));
out.close();
return;
}