下面是“jsp+ajax实现无刷新上传文件的方法”的详细攻略:
首先,我们需要确定文件上传到服务器的目录。可以在项目的WEB-INF目录下创建一个upload文件夹,用于存放上传的文件。
接下来,我们需要编写HTML代码,用于用户在页面上选择要上传的文件,并且实现无刷新上传文件的功能。代码如下所示:
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" name="file" id="uploadFile">
<input type="button" value="上传" id="uploadBtn">
</form>
<div id="previewContainer"></div>
上面的HTML代码包含一个表单和一个用于显示上传结果的容器。表单中包含一个文件上传输入框和一个上传按钮。当用户选择了要上传的文件后,可以点击上传按钮将文件上传到服务器。
然后,我们需要编写AJAX代码,用于无刷新上传文件和显示上传结果。jQuery库可以方便地实现AJAX操作。代码如下所示:
$(function() {
$('#uploadBtn').click(function() {
var formData = new FormData($('#uploadForm')[0]);
$.ajax({
url: "upload.jsp",
type: "POST",
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(response) {
$('#previewContainer').html(response);
}
});
});
});
上面的代码使用jQuery库实现了无刷新上传文件的功能。首先获取了表单数据,然后通过AJAX发送POST请求到服务器的upload.jsp页面。服务器处理上传请求,并返回上传结果。最后在页面上显示上传结果。
最后,我们需要编写服务器端代码,用于接收和处理上传请求。代码如下所示:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.io.*, java.util.*" %>
<%
String savePath = getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath + " 路径不存在,需要创建!");
file.mkdir();
}
String message = "";
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
if (!ServletFileUpload.isMultipartContent(request)) {
return;
}
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
if (item.isFormField()) {
continue;
}
String fileName = item.getName();
InputStream is = item.getInputStream();
File uploadFile = new File(savePath + File.separator + fileName);
FileOutputStream fos = new FileOutputStream(uploadFile);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
message = "文件上传成功!文件路径为:" + savePath + File.separator + fileName;
fos.close();
is.close();
item.delete();
}
} catch (Exception e) {
message = "文件上传失败!原因是:" + e.getMessage();
e.printStackTrace();
}
out.print(message);
%>
上面的JSP页面使用了FileUpload组件,可以方便地处理文件的上传请求。首先获取文件上传的目录,然后解析上传请求,并将上传文件保存到指定位置。最后返回上传结果。需要注意的是,文件上传的目录需要有写入权限。
我们可以通过一个示例,详细演示如何使用jsp+ajax实现无刷新上传文件的功能。
示例1:上传单个文件
假设我们要上传一张图片到服务器,可以按照以下步骤操作:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>无刷新上传文件示例</title>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#uploadBtn').click(function() {
var formData = new FormData($('#uploadForm')[0]);
$.ajax({
url: "upload.jsp",
type: "POST",
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(response) {
$('#previewContainer').html(response);
}
});
});
});
</script>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" name="file" id="uploadFile">
<input type="button" value="上传" id="uploadBtn">
</form>
<div id="previewContainer"></div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.io.*, java.util.*" %>
<%
String savePath = getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath + " 路径不存在,需要创建!");
file.mkdir();
}
String message = "";
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
if (!ServletFileUpload.isMultipartContent(request)) {
return;
}
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
if (item.isFormField()) {
continue;
}
String fileName = item.getName();
InputStream is = item.getInputStream();
File uploadFile = new File(savePath + File.separator + fileName);
FileOutputStream fos = new FileOutputStream(uploadFile);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
message = "文件上传成功!文件路径为:" + savePath + File.separator + fileName;
fos.close();
is.close();
item.delete();
}
} catch (Exception e) {
message = "文件上传失败!原因是:" + e.getMessage();
e.printStackTrace();
}
out.print(message);
%>
示例2:上传多个文件
如果要上传多个文件,可以简单修改表单的HTML代码,增加multiple属性。代码如下:
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" name="file" id="uploadFile" multiple>
<input type="button" value="上传" id="uploadBtn">
</form>
<div id="previewContainer"></div>
然后,修改JSP页面的代码,遍历请求中的所有文件,并将它们全部上传。代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.io.*, java.util.*" %>
<%
String savePath = getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath + " 路径不存在,需要创建!");
file.mkdir();
}
String message = "";
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
if (!ServletFileUpload.isMultipartContent(request)) {
return;
}
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
if (item.isFormField()) {
continue;
}
String fileName = item.getName();
InputStream is = item.getInputStream();
File uploadFile = new File(savePath + File.separator + fileName);
FileOutputStream fos = new FileOutputStream(uploadFile);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
message += "文件上传成功!文件路径为:" + savePath + File.separator + fileName + "<br>";
fos.close();
is.close();
item.delete();
}
} catch (Exception e) {
message += "文件上传失败!原因是:" + e.getMessage() + "<br>";
e.printStackTrace();
}
out.print(message);
%>
打开浏览器,访问上传页面,在页面上选择多个文件,然后点击上传按钮。上传完成后,页面会显示上传结果。
本文链接:http://task.lmcjl.com/news/6215.html