Java Servlet 使用getPart接收ajax上传的文件

本文详细介绍了如何使用Java Servlet 3.0的getPart和getParts方法进行单文件和多文件上传。通过HTML表单、JavaScript以及Java后端代码,展示了上传过程。同时,还涉及到文件预览功能的实现。
摘要由CSDN通过智能技术生成


参考了网上的代码,记录下来。

参考

Java Servlet3.0使用getPart/getParts实现单文件和多文件上传
Part类的官方文档

单文件上传

选择文件 点击上传 参数名为 file,用于后端获取

html

<div>
	<input type="file" id="file" value="文件上传"/>
</div>
<div>
	<button type="button" id="upload">Upload</button>
</div>

js

单文件上传

var uploadFile;
$(function() {
   
	$('#file').on('change', function() {
   
		var files = this.files;
		if (files.length == 0) {
   
			return;
		}
		uploadFile = files[0];
	});
	$('#upload').on('click', function() {
   
		var formData = new FormData();
		formData.append("file", uploadFile); // 后端通过 'file' 获取
		$.ajax({
   
			url: 'http://localhost/Test/upload',
			data: formData,
			type: "post",
			processData: false, //必须false才会避开jQuery对 formdata 的默认处理 XMLHttpRequest会对 formdata 进行正确的处理
			contentType: false, //必须false才会自动加上正确的Content-Type
			success: function(result) {
   
				console.log(result);
			}
		});
	});
});

Java

@MultipartConfig 这个注解必须加上

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet("/upload")
@MultipartConfig
public class UploadFileServlet extends HttpServlet {
   

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程详细讲解了以下内容:    1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程    2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例    3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题     4.session与cookie问题及application、cookie补充说明及四种范围对象作用域     5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别     6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据     7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)     8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用ServletAPI详解与源码分析     9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)    1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)     11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet     12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题     13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove     14.过滤器、过滤器通配符、过滤器链、监听器     15.session绑定解绑、钝化活化     16.以及Ajax的各种应用     17. Idea环境下的Java Web开发
### 回答1: Java 可以使用 Java Servlet接收前端上传文件。 要接收文件,可以在 Java Servlet使用 `HttpServletRequest` 对象的 `getPart` 方法来获取表单中的文件。例如: ``` Part filePart = request.getPart("file"); // 获取文件 InputStream fileContent = filePart.getInputStream(); // 获取文件的输入流 ``` 接下来,你可以使用这个输入流来读取文件的内容。 注意,要使用 `getPart` 方法,必须在表单中使用 `enctype="multipart/form-data"` 属性。还要在 servlet 中加入 `@MultipartConfig` 注解。 例如,你的 HTML 表单可能长这样: ``` <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> ``` 你的 servlet 类可能长这样: ``` @WebServlet("/upload") @MultipartConfig public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart = request.getPart("file"); // 获取文件 InputStream fileContent = filePart.getInputStream(); // 获取文件的输入流 // ... } } ``` ### 回答2: 在Java中,可以使用Servlet接收前端上传过来的文件。以下是接收文件的步骤: 1. 创建一个Servlet,继承自javax.servlet.http.HttpServlet。 2. 在Servlet中重写doPost方法,该方法用于处理HTTP POST请求。 3. 在doPost方法中获取HttpServletRequest对象,该对象包含了上传文件的信息。 4. 使用HttpServletRequest对象的getPart方法获取文件上传的Part对象。 5. 使用Part对象的getInputStream方法获取上传文件的输入流。 6. 创建一个字节数组来存储文件的内容。 7. 通过输入流将文件的内容读取到字节数组中。 以下是一个简单的示例代码: ```java 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.io.InputStream; @WebServlet("/upload") @MultipartConfig public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传文件 Part filePart = request.getPart("file"); // 获取文件的输入流 InputStream inputStream = filePart.getInputStream(); // 创建字节数组存储文件内容 byte[] fileBytes = new byte[inputStream.available()]; // 读取文件内容到字节数组 inputStream.read(fileBytes); // 处理文件内容 // 关闭输入流 inputStream.close(); } } ``` 在上述示例中,通过getPart方法获取了名为"file"的上传文件,然后使用getInputStream方法获取了文件的输入流。接着,创建了一个字节数组来存储文件内容,并使用输入流将文件内容读取到字节数组中。最后,可以对文件内容进行相应的处理。 ### 回答3: 在Java中,可以使用Servlet或者Spring MVC来接收前端上传文件使用Servlet时,可以通过获取HttpServletRequest对象,然后使用getPart()方法获取前端上传文件。具体代码如下: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传文件 Part filePart = request.getPart("file"); // file为前端表单中文件域的name属性值 // 保存文件到服务器 String fileName = filePart.getSubmittedFileName(); // 获取文件名 InputStream fileContent = filePart.getInputStream(); // 获取文件内容 // 将文件内容写入服务器的指定路径 Files.copy(fileContent, Paths.get("/path/to/save/" + fileName)); } ``` 使用Spring MVC时,可以借助MultipartFile类型的参数来接收前端上传文件。具体代码如下: ```java @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { // 判断文件是否为空 if (!file.isEmpty()) { // 获取文件名 String fileName = file.getOriginalFilename(); // 保存文件到服务器 byte[] bytes = file.getBytes(); Files.write(Paths.get("/path/to/save/" + fileName), bytes); return "上传成功"; } else { return "上传失败"; } } ``` 以上是两种常见的Java接收前端上传文件的方法,开发者可以根据自己的需求选择适合自己的方式来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值