关于Java实现文件上传功能,以下是完整的攻略,包含过程、代码示例和注意事项。
1. 上传功能的流程概述
实现文件上传功能至少需要以下步骤:
- 客户端(一般使用浏览器或APP)选择文件,并将文件以二进制方式提交给服务端;
- 服务端在接收到文件后,对文件进行验证(如格式、大小等),并将文件存储到指定的位置;
- 服务端返回上传结果给客户端。
2. 基于Servlet实现文件上传功能
基于Servlet实现文件上传功能的具体步骤如下:
- 在web.xml中配置文件上传的servlet:
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
- 实现UploadServlet类,该类继承HttpServlet,实现doPost方法。
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取保存文件的路径
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
// 获取上传文件的名字
String filename = request.getHeader("content-disposition");
// 将文件流保存到指定路径
InputStream in = request.getInputStream();
FileOutputStream fos = new FileOutputStream(new File(savePath + "/" + filename));
byte[] b = new byte[1024];
int len = -1;
while ((len = in.read(b)) != -1) {
fos.write(b, 0, len);
}
fos.close();
in.close();
// 返回上传结果
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("文件上传成功");
}
}
其中,获取上传文件的名字需通过request.getHeader("content-disposition")获取,而文件流则可以通过request.getInputStream()获取。
- 部署web项目,并在浏览器中访问上传文件的页面:
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" /><br />
<input type="submit" value="上传" />
</form>
</body>
- 测试上传功能:
- 先启动tomcat;
- 在浏览器中输入http://localhost:8080/upload.html,跳转到上传文件的页面;
- 选择一个文件,点击“上传”按钮,跳转到“文件上传成功”的页面。
3. 基于SpringMVC实现文件上传功能
基于SpringMVC实现文件上传功能的具体步骤如下:
- 配置multipartResolver。
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000" />
</bean>
在dispatcher-servlet.xml中配置multipartResolver,指定文件上传的最大大小。
- 在控制器中实现文件上传。
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(@RequestParam MultipartFile file, HttpServletRequest request, Model model)
throws IllegalStateException, IOException {
String savePath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
File dir = new File(savePath);
if (!dir.exists()) {
dir.mkdirs();
}
String filename = file.getOriginalFilename();
InputStream is = file.getInputStream();
OutputStream os = new FileOutputStream(new File(dir, filename));
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
model.addAttribute("message", "文件上传成功");
return "uploadResult";
}
其中,MultipartFile是SpringMVC封装的文件上传对象,如需多个文件上传,可使用MultipartHttpServletRequest封装多个MultipartFile对象。
- 前端页面调用上传控制器。
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="上传">
</form>
- 测试上传功能:
- 在上传文件的页面中选择一个文件,点击“上传”按钮;
- 跳转到上传结果页面,提示“文件上传成功”。
4. 注意事项
- 需要对上传文件的大小、格式等进行验证;
- 服务器需对上传文件的内容类型做出相应的解析;
- 用户需要有读、写指定路径的权限;
- 文件的保存路径需要有明确的安排;
- 需要正确地设置文件上传的最大大小限制。
以上就是Java实现文件上传功能的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现文件的上传功能 - Python技术站