Java实现文件上传和下载功能的方法有很多,这里提供一种基于Spring Boot的简单实现方法。在Spring Boot中,可以使用MultipartFile类来处理文件上传,使用HttpServletResponse类来处理文件下载。具体实现方法可以参考以下链接:
Java实现文件上传功能
在Java中,我们可以使用Servlet和Apache的Commons FileUpload库来实现文件上传功能,以下是一个简单的示例:
1、我们需要在项目中引入Apache Commons FileUpload库,在pom.xml文件中添加以下依赖:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
2、创建一个HTML表单,用于上传文件:
<!DOCTYPE html> <html> <head> <title>文件上传</title> </head> <body> <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <button type="submit">上传</button> </form> </body> </html>
3、创建一个Servlet类,用于处理文件上传请求:
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; 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.File; import java.io.IOException; import java.util.List; @WebServlet("/upload") public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检查是否为多媒体上传 if (!ServletFileUpload.isMultipartContent(request)) { // 如果不是则停止 PrintWriter writer = response.getWriter(); writer.println("Error: 表单必须包含 enctype=multipart/form-data"); writer.flush(); return; } // 配置上传参数 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); upload.setFileSizeMax(50 * 1024 * 1024); // 设置最大上传文件大小为50MB upload.setHeader("Connection", "Keep-Alive"); upload.setHeader("Charset", "UTF-8"); upload.setHeader("Content-Disposition", "attachment;filename="uploaded_file""); // 设置上传文件名 upload.setThreadPoolSize(10); // 设置线程池大小为10个线程 upload.setProgressListener(new UploadProgressListener()); // 设置上传进度监听器 upload.start(); //开始上传文件的处理流程,这里的参数是用来接收服务器返回的数据的,如果不需要处理服务器返回的数据,可以不传这个参数,否则需要传入一个实现了org.apache.commons.fileupload包中的IProgressListener接口的对象作为参数,这个对象将会在每次文件块传输时被调用,这样就可以实时得到文件上传进度的信息了,然后通过list来获取所有的文件项信息,最后将这些文件保存到指定位置,这里使用到了org.apache.commons.fileupload包中的FileItem类,该类代表了一个要被上传的文件项,它包含了文件的所有信息,如文件名、大小、类型等,然后根据这些信息创建一个File对象,并将其保存到指定位置,最后关闭流和连接即可,下面是代码实现: ```java @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //检查是否为多媒体上传 if (!ServletFileUpload.isMultipartContent(req)) { PrintWriter writer = resp.getWriter(); writer.println("Error: form must have enctype=multipart/form-data"); writer.flush(); return; } //配置上传参数 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建一个对象用于存储所有文件数据 List<FileItem> formItems = upload.parseRequest(req); if (formItems != null && formItems.size() > 0) { //迭代表单数据 for (int i = 0; i < formItems.size(); i++) { //获取当前表单项 FileItem item = formItems.get(i); if (!item.isFormField()) { String name = new String(item.getName()); String filename = name + System.currentTimeMillis() + "_" + item.getContentType(); String filePath = getServletContext().getRealPath("/upload") + File.separator + filename; File storeFile = new File(filePath); //保存文件 item.write(storeFile); System.out.println("文件已保存:" + filePath); } else { String value = item.getString("value"); System.out.println("字段名:" + item.getFieldName() + ",值:" + value); //输出表单字段的值 if (item != null && item instanceof org.apache.commons.fileupload.disk.DiskFileItem){ try{ ((org.apache.commons.fileupload.disk.DiskFileItem)item).delete();} catch (Exception e){}//删除临时文件 try{ ((org
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/131425.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复