效果
说明
- 首先文件上传得需要后台支持,我这里用的node写的后端服务,篇幅有限,这里就不贴后端代码了,有需要的留言联系
dom部分
- 由于form表单自动关联input文件上传按钮,故点击上传文件按钮时会自动往
action
路径提交文件
<h3>文件上传:</h3>
选择一个文件上传: <br />
<form action="http://localhost:8090/upToImg1" method="post" enctype="multipart/form-data" id="formData2">
名字 <input type="text" name="name"></input>
<br />
描述 <input type="text" name="content"></input>
<br />
<input type="file" name="image" size="50" onchange="fileChange(this)" />
<br />
<input type="submit" value="上传文件" id="submitButton" />
</form>
<button id="mybutton">获取</button>
<ul id="myul"></ul>
js部分
- 如果需要手动点击按钮上传,只需对其进行点击事件并禁止默认行为即可
- 我这里用
jquery
做的请求,如果项目需要,请求时 需要携带其它参数 ,比如像我上面的名字和描述数据,可以把需要传递的数据用input框传递进去 - 如果想对文件做限制,可根据
onchange
事件处理,函数返回false或promise的reject失败,即会阻止submit提交
var submitButton = document.getElementById('submitButton');
var myul = document.getElementById('myul');
var mybutton = document.getElementById('mybutton');
submitButton.onclick = function (e) {
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
var formData = new FormData($("#formData2")[0]);
$.ajax({
url: 'http://localhost:8090/upToImg1',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
console.log(returndata);
},
error: function (returndata) {
console.log(returndata);
}
});
}
function fileChange(target) {
var fileSize = 0;
fileSize = target.files[0].size;
var size = fileSize / 1024;
if (size > 1000) {
alert("附件不能大于1M");
target.value = "";
return false; //阻止submit提交
}
var name = target.value;
var fileName = name.substring(name.lastIndexOf(".") + 1).toLowerCase();
if (fileName != "jpg" && fileName != "jpeg" && fileName != "png" && fileName != "gif") {
alert("请选择图片格式文件上传(jpg,png,gif,gif等)!");
target.value = "";
return false; //阻止submit提交
}
}
mybutton.onclick = function () {
$.ajax({
url: 'http://localhost:8090/upToImg1',
type: 'get',
success: function (returndata) {
console.log(returndata);
var str='';
returndata.data.forEach(ele => {
str+=`<li><img src="http://localhost:8090/upload/${ele.src}" alt="${ele.content}">${ele.name}</li>`
});
$("#myul").append(str)
},
error: function (returndata) {
console.log(returndata);
}
});
}
- 上传成功后对相应数据做需要操作即可,我这里上传成功后通过点击
获取
按钮得到上传文件的列表,并通过 字符串拼接 的方式动态添加图片到ul
上
注意
由于图片是在服务端存储,返回的图片只是图片的文件名,要想通过
img
标签展示图片,需拼接正确路径以匹配到后端存储代码