java如何实现上传文件到服务器
使用Servlet实现文件上传
在Java中,可以通过Servlet来处理文件上传。需要用到HttpServletRequest的getPart或getParts方法来获取上传的文件。
@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
InputStream fileContent = filePart.getInputStream();
// 保存文件到服务器
Files.copy(fileContent, Paths.get("/path/to/save/" + fileName));
response.getWriter().print("File uploaded successfully");
}
}
使用Spring Boot实现文件上传
Spring Boot提供了更简洁的方式处理文件上传,通常结合MultipartFile使用。

@RestController
public class FileUploadController {
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
try {
String uploadDir = "/path/to/save/";
File uploadPath = new File(uploadDir);
if (!uploadPath.exists()) {
uploadPath.mkdirs();
}
file.transferTo(new File(uploadDir + file.getOriginalFilename()));
return "File uploaded successfully";
} catch (IOException e) {
return "File upload failed: " + e.getMessage();
}
}
}
使用Apache Commons FileUpload
对于非Spring项目,可以使用Apache Commons FileUpload库处理文件上传。
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
item.write(new File("/path/to/save/" + fileName));
}
}
处理大文件上传
对于大文件上传,建议设置临时存储目录和文件大小限制。

@MultipartConfig(
fileSizeThreshold = 1024 * 1024, // 1MB
maxFileSize = 1024 * 1024 * 10, // 10MB
maxRequestSize = 1024 * 1024 * 50 // 50MB
)
客户端HTML表单
文件上传需要客户端表单设置enctype="multipart/form-data"。
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Upload</button>
</form>
安全性考虑
文件上传时需验证文件类型和大小,避免恶意文件上传。
String contentType = file.getContentType();
if (!"image/jpeg".equals(contentType)) {
throw new IllegalArgumentException("Only JPEG images are allowed");
}






