javaweb上传文件html
上传文件的jsp中的部分java
上传文件一样能够使用form表单向后端发请求,也能够使用 ajax向后端发请求web
1.经过form表单向后端发送请求ajax
<form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">数据库
<div class="bbxx wrap">后端
<inputtype="text" id="side-profile-name" name="username" class="form-control">服务器
<inputtype="file" id="example-file-input" name="avatar">app
<button type="submit" class="btn btn-effect-ripple btn-primary">Save</button>jsp
</div>ide
</form>
改进后的代码不须要form标签,直接由控件来实现。开发人员只须要关注业务逻辑便可。JS中已经帮咱们封闭好了
经过监控工具能够看到控件提交的数据,很是的清晰,调试也很是的简单。
2.经过ajax向后端发送请求
1.
$.ajax({
url : "${pageContext.request.contextPath}/UploadServlet",
type : "POST",
data : $( '#postForm').serialize(),
success : function(data) {
$( '#serverResponse').html(data);
},
error : function(data) {
$( '#serverResponse').html(data.status + " : " + data.statusText + " : " + data.responseText);
}
});
ajax分为两部分,一部分是初始化,文件在上传前经过AJAX请求通知服务端进行初始化操做
在文件上传完后向服务器发送通知
这里须要处理一个MD5秒传的逻辑,当服务器存在相同文件时,不须要用户再上传,而是直接通知用户秒传
这里能够看到秒传的逻辑是很是 简单的,并非特别的复杂。
var form = new FormData();
form.append("username","zxj");
form.append("avatar",file);
//var form = new FormData($("#postForm")[0]);
$.ajax({
url:"${pageContext.request.contextPath}/UploadServlet",
type:"post",
data:form,
processData:false,
contentType:false,
success:function(data){
console.log(data);
}
});
java部分
文件初始化的逻辑
接收文件块数据,在这个逻辑中咱们接收文件块数据。控件对数据进行了优化,能够方便调试。若是用监控工具能够看到控件提交的数据。
注:
1. 上面的java部分的代码能够直接使用,只须要将上传的图片路径及收集数据并将数据写入到数据库便可
2. 上面上传文件使用到了字节流,其实还能够使用别的流,这个须要读者本身在下面完善测试
3. BeanUtils是一个工具 便于将实体对应的属性赋给实体
4. 上传文件不能使用 request.getParameter("")获取参数了,而是直接将request解析,经过判断每一项是文件仍是非文件,而后进行相应的操做(文件的话就是用流来读取,非文件的话,暂时保存到一个map中。)
后端代码逻辑大部分是相同的,目前可以支持MySQL,Oracle,SQL。在使用前须要配置一下数据库,能够参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0/