看看Java Web怎么上传文件到服务器

旁白不多说了直接上主题了。

1、新建上传文件夹

在eclipse中,在我们前面文章中用到的项目HelloJSP,在webapp目录下新建uploadfiles文件夹,如下所示:

2、修改HelloWorld.jsp文件

<body><h1>文件上传</h1><form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上传"></form>
</body>

3、新建servlet

上面表单action里面新建名为upload的servlet文件,然后修改dopost方法如下:

package com.servlet;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;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;/*** Servlet implementation class Upload*/
@WebServlet("/Upload")
@MultipartConfig
public class Upload extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public Upload() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getWriter().append("Served at: ").append(request.getContextPath());}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//doGet(request, response);// 获取上传的文件Part filePart = request.getPart("file");String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();String uploadPath = getServletContext().getRealPath("") + File.separator + "uploadfiles";System.out.println(uploadPath);File uploadDir = new File(uploadPath);if (!uploadDir.exists()) {uploadDir.mkdir();}// 保存文件到服务器InputStream inputStream = filePart.getInputStream();Path filePath = Paths.get(uploadPath, fileName);Files.copy(inputStream, filePath);inputStream.close();// 返回成功信息response.setContentType("text/html;charset=UTF-8");response.getWriter().println("文件上传成功!");}}

注意:记得要添加@MultipartConfig注释,否则上传文件会报错。

@MultipartConfig 是一个Java注解,用于在Java Servlet中配置支持文件上传的功能。它通常与标签的enctype属性值设置为"multipart/form-data"一起使用。

当你在Servlet中使用@MultipartConfig注解时,它告诉容器该Servlet可以接收以多部分(multipart)形式发送的请求。多部分请求通常用于上传文件,因为文件的二进制数据需要以多部分形式进行传输。

4、测试上传

在代码里面可以打印出来上传到的路径,如下:

其实是在eclipse工作空间的,webapps目录下添加了上传的文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 2671

leetcode 2671 题目 例子 思路1 使用哈希&#xff0c; unordered_map 是基于hash 实现的key,val 存储。 代码1 class FrequencyTracker {unordered_map<int, int>m;public:FrequencyTracker() { }void add(int number) {if(m.find(number) m.end()){m.insert({num…

Java学习day2

命名规则 在JAVA中&#xff0c;公共类的明朝必须与包含该类的源文件的文件名向匹配&#xff0c;即 这两个名称要一致 变量类型 与c/c基本一致 需要注意的是&#xff0c;long类型的数据在后面需要加上l或L&#xff08;建议加L&#xff0c;l可能会被误判&#xff09;&#xff…

Oracle等待事件-db file parallel read

前面两篇聊了Oracle等待事件-db file scattered read和Oracle等待事件-db file sequential read 相比于前两者等待事件只有读,但是到db file parallel 就有db file parallel read 和 db file parallel write db file parallel read是指当进程并行发出多个 I/O 请求以将数据…

关于vue3的自定义hook

把一些逻辑写在单独的ts文件里&#xff0c;vue文件使用的时候引入即可 计算属性 1、方法1&#xff1a;return计算属性 直接写出去的话&#xff0c;使用时报错 ExpirationTime是一个计算属性&#xff0c;若直接在html上使用{{ExpirationTime(orderForm)}}报错 查阅资料显示&…

【代码学习】Mediapipe人脸检测使用记录

Mediapipe&#xff0c;每秒200-300帧的实时人脸检测&#xff0c;提取画面中的人脸框&#xff0c;实现后续各种应用&#xff1a;人脸属性识别、表情识别、关键点检测、三维重建、增强现实、AI换妆等 code&#xff1a;google/mediapipe: Cross-platform, customizable ML soluti…

复旦EMBA参访娃哈哈:交流企业创新转型、家族企业管理之道

早在多年前&#xff0c;复旦EMBA同学曾参访娃哈哈集团&#xff0c;与宗庆后先生对话&#xff0c;就国内企业创新转型、家族企业管理之道、“企二代”的成长、企业社会责任等热点问题向其探讨交流。通过面对面的实地企业参访和行业领袖的深入交流&#xff0c;亲身触摸中国科创的…

结构体类型详细讲解(附带枚举,联合)

前言&#xff1a; 如果你还对结构体不是很了解&#xff0c;那么本篇文章将会从 为什么存在结构体&#xff0c;结构体的优点&#xff0c;结构体的定义&#xff0c;结构体的使用与结构体的大小依次介绍&#xff0c;同样会附带枚举与联合体 目录 为什么存在结构体&#xff1a; 结构…

手撕算法-删除有序数组中的重复项 II

描述 例如&#xff1a;输入&#xff1a;nums [1,1,1,2,2,3]输出&#xff1a;5, nums [1,1,2,2,3]解释&#xff1a;函数应返回新长度 length 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。 分析 双指针, fast, slow。nums[…

需求分析的过程

需求分析的工具 ominGraffle/Visio Gliffy ProcessOn RSA(UML) PPT/WORD 手绘 需求所需要的工件&#xff1a; 系统上下文、用例模型、质量限制 1.系统上下文的工件 2.用例模型工件&#xff08;什么功能&#xff09; 3.质量和限制 质量&#xff1a;管理10个小动物&#xff0c;…

【MySQL】2.MySQL数据库的基本操作

目录 数据库基本操作 查看数据库信息 查看数据库结构 显示数据表的结构&#xff08;字段&#xff09; 常用的数据类型 数据库管理操作 SQL语句概述 SQL分类 1.DDL&#xff1a;数据定义语言 1.1创建数据库和表 创建数据库 创建数据表 1.2删除数据库和表 删除数据表…

带3090显卡的Linux服务器上部署SDWebui

背景 一直在研究文生图&#xff0c;之前一直是用原始模型和diffuser跑SD模型&#xff0c;近来看到不少比较博主在用 SDWebui&#xff0c;于是想着在Linux服务器上部署体验一下&#xff0c;谁知道并没有想象的那么顺利&#xff0c;还是踩了不少坑。记录一下过程&#xff0c;也许…

Web框架开发-Ajax

一、 Ajax准备知识:json 1、json(Javascript Obiect Notation,JS对象标记)是一种轻量级的数据交换格式 1 2 它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。…