简单操作实现Java jsp servlet文件上传过程解析
在Java Web开发中,文件上传是非常常见的功能,本文将详细讲解如何使用Java jsp servlet实现文件上传功能。文件上传的过程主要包含以下几步:
- 创建上传表单并设置相应属性
- 编写Java servlet处理上传请求
- 获取上传文件的相关信息
- 保存上传文件到服务端指定目录
下面将对这几步进行详细解析
1. 创建上传表单并设置相应属性
在jsp页面中创建上传表单,代码如下:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
其中,enctype
属性设置为multipart/form-data
,表示该表单是上传文件的表单。input
标签的type
属性设置为file
,表示该表单元素是文件上传相关的。
2. 编写Java servlet处理上传请求
创建Java servlet类,处理上传请求,代码如下:
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
String fileName = request.getParameter("file");
Part part = request.getPart("file");
String header = part.getHeader("content-disposition");
String fileName2 = header.substring(header.indexOf("filename\"") + 10, header.lastIndexOf("\""));
part.write(savePath + "/" + fileName2);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("文件上传成功!");
}
}
使用servlet3.0
提供的注解@WebServlet("/upload")
,将该Java servlet映射到/upload
路径。
3. 获取上传文件的相关信息
在servlet
中获取上传文件的相关信息,request.getPart("file")
获取上传文件的Part
对象,我们可以通过该对象获取实际上传文件的名字,代码如下:
String header = part.getHeader("content-disposition");
String fileName = header.substring(header.indexOf("filename\"") + 10, header.lastIndexOf("\""));
4. 保存上传文件到服务端指定目录
最后将文件保存到服务端指定的目录中,代码如下:
part.write(savePath + "/" + fileName);
示例1:保存文件到数据库中
有时我们需要把上传的文件保存到数据库中,而不是保存到本地的文件系统中。以下为保存上传文件到数据库的示例代码:
// 获取上传文件流
InputStream inputStream = part.getInputStream();
// 获取上传文件的字节数组
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
// 把字节数组转换成Blob类型后存储到数据库
Connection conn = DriverManager.getConnection("url", "user", "password");
PreparedStatement ps = conn.prepareStatement("insert into files(name, data) values(?,?)");
ps.setString(1, fileName);
Blob blob = new SerialBlob(bytes);
ps.setBlob(2, blob);
ps.execute();
示例2:使用Apache Commons FileUpload组件上传文件
除了原生的Java jsp servlet文件上传,我们也可以使用第三方组件来简化上传文件的处理。Apache Commons FileUpload就是一个非常常用的文件上传组件。以下为使用Apache Commons FileUpload上传文件的代码示例:
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
// 创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 1024);
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
// 创建ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 处理上传请求
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
// 判断是否是文件上传表单域
if (!item.isFormField()) {
String fileName = item.getName();
// 保存文件
item.write(new File(savePath, fileName));
}
}
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("文件上传成功!");
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
以上就是Java jsp servlet文件上传过程的完整攻略,希望对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单操作实现Java jsp servlet文件上传过程解析 - Python技术站