前言

        在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,下载的

情况也很多,接下来我们看看servlet中怎么实现文件的上传和下载。

一、文件上传

         文件上传涉及到前台页面的编写和后台服务器代码的编写,前台发送文件,后台接收并保存文件,这才是一个完整的文件上传。

1.1 前台页面

        在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的请求方式为POST; 其次我们的form表单的enctype必须设为“multipart/form-data”,即enctype=“multipart/form-data”,意思是设置表单的类型为文件上传表单,默认情况下这个表单类型是”application/x-www.form-urlencoded“,不能用于文件上传,只有使用了multipart/form-data才能完整地传递文件数据。

文件上传

姓名:

文件:

1.2 后台实现

        使用注解@MultipartConfig将一个Servlet标识为支持文件上传.Servlet将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作.

import javax.servlet.ServletException;

import javax.servlet.annotation.MultipartConfig;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.Part;

import java.io.IOException;

@WebServlet("/upload")

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 设置文件大小阈值

maxFileSize = 1024 * 1024 * 10, // 设置最大文件大小

maxRequestSize = 1024 * 1024 * 50) // 设置最大请求大小

public class FileUploadServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取上传的文件

Part filePart = request.getPart("file");

String fileName = getFileName(filePart);

// 指定文件保存路径

String savePath = "C:/uploads/" + fileName;

// 保存文件到指定路径

filePart.write(savePath);

// 文件上传成功后的处理逻辑

response.getWriter().println("文件上传成功!");

}

// 从Part的header中获取文件名

private String getFileName(Part part) {

String contentDisposition = part.getHeader("content-disposition");

String[] elements = contentDisposition.split(";");

for (String element : elements) {

if (element.trim().startsWith("filename")) {

return element.substring(element.indexOf('=') + 1).trim().replace("\"", "");

}

}

return null;

}

}

二、文件下载

2.1 前台页面

文件下载

点击这里下载文件

 2.2后台实现   

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.OutputStream;

@WebServlet("/download")

public class FileDownloadServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取要下载的文件路径

String filePath = "path_to_your_file";

// 设置响应头,告诉浏览器响应类型为文件下载

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment;filename=\"" + filePath + "\"");

// 读取文件,并写入响应流中

FileInputStream fileInputStream = new FileInputStream(filePath);

OutputStream outputStream = response.getOutputStream();

byte[] buffer = new byte[4096];

int bytesRead;

while ((bytesRead = fileInputStream.read(buffer)) != -1) {

outputStream.write(buffer, 0, bytesRead);

}

fileInputStream.close();

outputStream.close();

}

}

 

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: