html:
<form id="formid" action="" method="post" enctype="multipart/form-data">
文件:<input type="file" name="fileName" id="file" />
<br />
<input type="submit" value="上传" id="sub"/>
<input type="button" value="上传" id="but"/>
</form>
<div ><img id="showImg" src=""></div>
获取要上传的数据文件
方式一:通过表单获取
var data = new FormData($('#form')[0]);
方式二:通过file的id获取
var file = $('#fileid').get(0).files[0];
var formData = new FormData();
formData.append("file",file);
提交表单数据
方式一:ajax异步提交
注意:如果要使用异步提交的话在绑定点击事件的时候就不能将其绑定在type=submit上,而是type=button
<script>
$(function () {
$('#but').click(function () {
var file = $('#fileid').get(0).files[0];
var formData = new FormData();
formData.append("file",file);
$.ajax({
url:"${pageContext.request.contextPath}/user/userImg",
type:"post",
data:formData,
dataType:'text',
cache:false,
contentType: false,
processData: false,
success:function (data) {
$('#showImg').attr('src',"${pageContext.request.contextPath}/upload/"+data);
}
})
})
})
</script>
方式二:ajax同步提交
注意:如果使用同步提交的话需要最后return false,否则话刷新页面
$('#upload').click(function () {
var formData = new FormData($('#form')[0]);
$.ajax({
url:"${pageContext.request.contextPath}/user/userImg,
type: 'POST',
data: formData ,
async: false,
cache: false,
contentType: false,
processData: false,
dataType:"text",
success:function (data) {
$('#showImg').attr('src',"${pageContext.request.contextPath}/upload/"+data);
}
})
方式三:使用ajaxfileupload.js插件
$(function () {
$("#formid").submit(function(){
return upload_file();
});
});
function upload_file(){
//ajax的文件上传
$.ajaxFileUpload({
url:"${pageContext.request.contextPath}/user/userImg",
secureuri:false,
fileElementId:'file',//input文件的id
type:"post",
dataType:"text",
success:function(data,status){
$('#showImg').attr('src',"${pageContext.request.contextPath}/upload/"+data);
}
});
return false;
}
下载https://github.com/carlcarl/AjaxFileUpload
注:需要提前引入jquery
后端代码:
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
try {
// Check that we have a file upload request
// 检查 我们 有 一个 文件 上传 请求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// 说明请求中带有文件
// Create a factory for disk-based file items
// 创建 一个 工厂 对于 磁盘文件条目(项目)
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
// 创建 一个新的 文件 上传 处理器
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
// 转换 请求 通过上传处理器,把request对象转换成list集合,list集合就是表单中的所有内容,包括上传的文件
List<FileItem> items = upload.parseRequest(request);
// Process the uploaded items
// 处理 已经上传的条目
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// 当前条目不是文件,是非文件域
String name = item.getFieldName();
String value = item.getString();
System.out.println("name=" + name + " value=" + value);
/*
* if("note".equals(name)){ user.setNote(value); }else
* if("note1".equals(name)){ user.setNote1(value); }
*/
} else {
// 当前条目是文件
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
System.out.println("fieldName=" + fieldName + " fileName=" + fileName + " contentType="
+ contentType + " isInMemory=" + isInMemory + " sizeInBytes=" + sizeInBytes);
// 获取文件上传服务器上的路径(把文件上传到服务器的哪个目录中)
String realPath = this.getServletContext().getRealPath("/upload");
// 如果目录不存在就创建
File uploadFilePath = new File(realPath);
if (!uploadFilePath.exists())
uploadFilePath.mkdir();
// 开始准备上传
File uploadFile = new File(realPath, fileName);
// 把item这个文件写到服务中的realPath目录中,并以fileName为文件名
item.write(uploadFile);
out.println("上传成功");
System.out.println(realPath);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
如果返现相应的text数据带有html标签,那是应为没有设置响应头导致的
text数据:response.setContentType("text/html;charset=utf-8");
json数据:response.setContentType("application/json; charset=utf-8");
|