Servlet实现单个图片,多个图片上传和图片的显示功能

注意:servlet3.0以后才有request.getPart("")这个方法, tomcat7 的环境下就没有part.getSubmittedFileName()这一方法,无法直接获取文件名

  1. 建立upFile.html或者jsp文件进行相关的上传
  2. 使用form表单进行相关的上传功能 里面设置 enctype=“multipart/form-data” 这个是进行二进行文件上传操作的属性设置
  3. 注意一下input的type="file"
  4. 请求必须是method=“post”,默认为get请求 ,用action=""请求 的servlet路径操作
  5. Servlet上面加上**@MutipartConfig注解里面可以写上上传地址属性location=""**
  6. 由于上传图片的名字可能重复所以 可以用UUID这个工具类进行生成图片的名字的操作,这样就可以图片不会覆盖
  7. UUID介绍:UUID,全名叫做 Universally Unique Identifier,也就是通用唯一标识符的意思。
    格式
123e4567-e89b-12d3-a456-556642440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

第一部分的长度为 8,第二部分和第三部分的长度为 4,第四部分的长度为 12,总长度为 36,
重点应用:

随机生成的文件名;
Java Web 应用程序的 sessionID;
数据库表的主键;

事务 ID(UUID 生成算法非常高效,每台计算机每秒高达 1000 万次)。

创建 upFileServelt.java类:

package com.nt.servlet;

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;
import java.util.UUID;

@WebServlet(name = "UpFileServlet",urlPatterns = "/Upservlet")
//文件上传的位置
@MultipartConfig(location = "E:/img",maxFileSize = 1024*1024*5)
public class UpFileServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {



        Part part = req.getPart("myfile");

//        tomcat7 的环境下就没有part.getSubmittedFileName()这一方法,无法直接获取文件名
//        String filename = part.getSubmittedFileName();


        String cd = part.getHeader("Content-Disposition");
//截取不同类型的文件需要自行判断
        String filename = cd.substring(cd.lastIndexOf("=")+2, cd.length()-1);

        String filename1= UUID.randomUUID().toString() + ".jpg";
        part.write(filename1);




    }
}

upFile.jsp:

<%--
  Created by IntelliJ IDEA.
  User: CourageAndLove
  Date: 2021/7/28
  Time: 9:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>


<form action="Upservlet" method="post" enctype="multipart/form-data">

    <input type="file" name="myfile">

    <input type="submit" value="提交">

</form>


</body>
</html>

多个文件的上传,只需**多加几个input type=“file”**的操作

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
可以使用Java的原生API实现多线程上文件,具体步骤如下: 1. 在前端页面中添加文件上表单,使用POST请求方式提交表单,表单的请求头必须设置为multipart/form-data。 2. 在后端代码中创建一个线程池,用于同时处理多个文件上任务。 3. 在后端代码中实现一个Runnable接口的类,用于处理单个文件的上任务。 4. 在上任务的run()方法中,使用Java的原生API读取上的文件流,将文件保存到指定的文件夹中。 5. 在文件上完成后,将上成功的文件信息存储到数据库中。 下面是一个简单的示例代码: ```java public class FileUploadTask implements Runnable { private FileItem fileItem; private String filePath; public FileUploadTask(FileItem fileItem, String filePath) { this.fileItem = fileItem; this.filePath = filePath; } public void run() { try { InputStream inputStream = fileItem.getInputStream(); String fileName = fileItem.getName(); File file = new File(filePath + File.separator + fileName); FileOutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } outputStream.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uploadPath = "D:/upload"; DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); ExecutorService executorService = Executors.newFixedThreadPool(5); for (FileItem item : items) { if (!item.isFormField()) { Runnable task = new FileUploadTask(item, uploadPath); executorService.execute(task); } } executorService.shutdown(); while (!executorService.isTerminated()) { Thread.sleep(1000); } response.getWriter().println("Upload completed successfully!"); } catch (Exception e) { e.printStackTrace(); response.getWriter().println("Upload failed!"); } } } ``` 这个示例代码使用了Java的ExecutorService线程池来管理多线程上任务,同时也使用了Java的ServletFileUpload和DiskFileItemFactory类来解析multipart/form-data类型的请求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时间指导毕业设计

觉得写的好的话可以给我打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值