JavaWeb文件上传下载功能示例解析
文件上传功能
基本原理
文件上传是将本地文件发送到服务器保存的过程。通过HTTP协议,客户端将文件数据发送到服务器端,服务器接收到数据后将其存储到指定的目录中。
在本例中,我们使用了Apache的文件上传组件commons-fileupload来实现文件上传功能。
实现步骤
- 引入相关依赖。
xml
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
- 在表单中设置enctype属性。
```html
```
- 在Servlet中获取上传文件并保存。
java
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = item.getName();
String filePath = "/path/to/save/" + fileName;
File file = new File(filePath);
item.write(file);
}
}
示例
在本示例中,我们建立一个名为FileUpload的JavaWeb项目,实现文件上传功能。
- 新建一个Servlet并加上@WebServlet注解。
```java
import javax.servlet.ServletException;
import javax.servlet.annotation.;
import javax.servlet.http.;
import org.apache.commons.fileupload.;
import org.apache.commons.fileupload.disk.;
import org.apache.commons.fileupload.servlet.*;
import java.io.;
import java.util.;
@WebServlet(name = "uploadServlet", urlPatterns = "/upload")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = item.getName();
String filePath = "/path/to/save/" + fileName;
File file = new File(filePath);
item.write(file);
}
}
response.getWriter().write("Upload Success!");
}
}
```
- 在WebContent目录下新建一个upload.jsp文件。
```html
```
- 启动服务器,并在浏览器中输入http://localhost:8080/FileUpload/upload.jsp即可上传文件。
文件下载功能
基本原理
文件下载是将服务器上的文件发送到客户端本地保存的过程。通过HTTP协议,服务器将文件的二进制数据发送到客户端,客户端接收到数据后将其存储到指定的目录中。
在JavaWeb中,我们可以使用ServletOutputStream类将文件的二进制数据输出到客户端。
实现步骤
- 设置响应头部信息。
java
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
- 读取文件数据并输出到客户端。
java
InputStream in = new FileInputStream(filePath);
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
示例
在本示例中,我们在FileUpload项目中添加一个DownloadServlet,实现文件下载功能。
- 新建一个Servlet并加上@WebServlet注解。
```java
import javax.servlet.ServletException;
import javax.servlet.annotation.;
import javax.servlet.http.;
import java.io.;
import java.net.;
@WebServlet(name = "downloadServlet", urlPatterns = "/download")
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
String filePath = "/path/to/save/" + fileName;
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
InputStream in = new FileInputStream(filePath);
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
}
}
```
- 在WebContent目录下新建一个download.jsp文件。
```html
File List
-
<%
File dir = new File("/path/to/save/");
String[] files = dir.list();
if (files != null && files.length > 0) {
- " + fileName + "
- Empty!
for (String fileName : files) {
out.print("
");
}
} else {
out.print("
");
}
%>
```
- 启动服务器,并在浏览器中输入http://localhost:8080/FileUpload/download.jsp即可下载文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb文件上传下载功能示例解析 - Python技术站