for (FileItem fileItem:list){ if (fileItem.isFormField()){ //普通表单项 System.out.println("表单项name的属性值"+fileItem.getFieldName()); //参数UTF-8解决乱码问题 System.out.println("表单项value的属性值"+fileItem.getString("UTF-8")); }else{ //上传文件 System.out.println("表单项的name属性值"+fileItem.getFieldName()); System.out.println("上传的文件名:"+fileItem.getName()); fileItem.write(new File("C:\\Users\\86184\\Pictures\\"+fileItem.getName())); } }
时间: 2024-02-10 13:12:42 浏览: 23
这是一个文件上传的代码片段。首先,代码使用了Apache文件上传组件(Commons FileUpload)解析HTTP请求中的表单数据。其中,`list`是`FileItem`对象的列表,每个`FileItem`对象表示表单中的一个表单项(可以是普通表单项或上传的文件)。接着,代码通过判断`FileItem`对象的`isFormField()`方法是否返回`true`,来区分普通表单项和上传的文件。如果是普通表单项,则打印出该表单项的`name`属性值和`value`属性值;如果是上传的文件,则打印出该表单项的`name`属性值和上传的文件名,并将该文件保存到本地磁盘上的`C:\Users\86184\Pictures\`目录下。
相关问题
multipart/form-data如何获取获取数据
如果您的form-data中Content-Type是multipart/form-data,那么需要使用特殊的方式来解析参数值。
在Java Web开发中,获取multipart/form-data数据最常用的方式是使用Apache Commons Fileupload组件。以下是获取multipart/form-data数据的示例代码:
```java
@PostMapping("/upload")
public String handleFileUpload(HttpServletRequest request) throws Exception {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
// 处理普通表单项
String name = item.getFieldName();
String value = item.getString();
System.out.println(name + "=" + value);
} else {
// 处理文件上传
String name = item.getFieldName();
String fileName = item.getName();
long size = item.getSize();
InputStream inputStream = item.getInputStream();
// 处理文件流...
}
}
}
// 处理其他业务逻辑...
}
```
上面的代码中,首先判断请求是否是multipart/form-data类型,如果是,则使用DiskFileItemFactory和ServletFileUpload来解析请求中的参数值。
在循环中,使用FileItem对象的isFormField方法来判断当前参数是否是普通表单项,如果是,则可以通过getFieldName和getString方法来获取参数名和参数值。
如果当前参数是文件上传项,则可以通过getName、getSize和getInputStream方法来获取文件名、文件大小和文件流。
需要注意的是,FileItem对象只能被读取一次,如果您需要多次读取同一个参数值,请先将其缓存到内存或磁盘中。另外,关于文件上传的安全性问题,建议您对上传的文件类型、大小、数量等做出限制,以防止恶意上传。
java action 怎么接收前端传过来的form-data数据
在 Java 中,可以使用 Servlet 或者 Spring MVC 框架来接收前端传过来的 form-data 数据。以下是两种不同的方式:
1. 使用 Servlet
在 Servlet 中,可以通过 HttpServletRequest 对象的 getParameter 方法来获取前端传来的 form-data 数据。对于 multipart/form-data 类型的数据,可以使用 Apache Commons FileUpload 库来处理。具体实现方式如下:
```java
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
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;
public class MyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 检查请求是否包含 multipart/form-data 类型的数据
if (ServletFileUpload.isMultipartContent(req)) {
// 创建 FileItemFactory 和 ServletFileUpload 实例
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 解析请求,获取所有的 FileItem
List<FileItem> items = upload.parseRequest(req);
for (FileItem item : items) {
// 如果是普通表单字段
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
// 处理表单字段的值
System.out.println(name + ": " + value);
} else {
// 如果是文件类型的字段
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
long sizeInBytes = item.getSize();
// 处理文件类型的字段
System.out.println("fieldName: " + fieldName);
System.out.println("fileName: " + fileName);
System.out.println("contentType: " + contentType);
System.out.println("sizeInBytes: " + sizeInBytes);
// 保存文件到服务器
File uploadedFile = new File("C:/uploads/" + fileName);
item.write(uploadedFile);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
```
2. 使用 Spring MVC
在 Spring MVC 中,可以使用 @RequestParam 注解或者 @ModelAttribute 注解来获取前端传来的 form-data 数据。对于 multipart/form-data 类型的数据,需要在 Spring MVC 配置文件中添加 MultipartResolver bean。具体实现方式如下:
```java
@Controller
public class MyController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(@RequestParam("username") String username,
@RequestParam("file") MultipartFile file) throws IOException {
System.out.println("username: " + username);
System.out.println("fileName: " + file.getOriginalFilename());
System.out.println("contentType: " + file.getContentType());
System.out.println("sizeInBytes: " + file.getSize());
// 保存文件到服务器
File uploadedFile = new File("C:/uploads/" + file.getOriginalFilename());
file.transferTo(uploadedFile);
return "success";
}
}
```