更新时间:2022-05-17 11:21:49 来源:极悦 浏览1468次
文件在每种编程语言中都起着至关重要的作用。为了使用 File,每个开发人员都应该了解如何用 Java 或其他编程语言实现文件上传功能。
在本节中,我们将了解如何在 Java 中实现文件上传功能,还将了解如何将文件上传到文件夹。
在Java中,我们使用单个servlet和HTML表单来创建对 servlet 的文件上传请求。我们实现了一个简单的HTML表单,它有两个字段,即 File 和 Destination。文件类型的输入字段允许用户从系统浏览文件。从系统中选择文件后,我们将文件作为 POST 请求发送到服务器。我们为表单添加了两个限制,即encrypt="multipart/form-data"和method="POST"。
有了这个限制,请求以编码形式发送到服务器。servlet 处理 POST 请求,处理传入的文件数据,并从流中提取 File。目的地定义了我们需要在系统中保存文件的位置的路径。数据被发布到 servlet,当我们单击 Upload 按钮时,它将文件存储到指定位置。
索引.html
<!DOCTYPE html>
<html lang= "en" >
<头部>
<title>Servlet 文件上传示例</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" >
</head>
<正文>
<form method= "POST" action= "uploadFile" enctype= "multipart/form-data" >
文件:
<输入类型= “文件” 名称= “文件” ID= “文件” />
<br/>
<br/>
目的地:
<输入类型= “文本” 值= “/javaTpoint” 名称= “目标” />
<br/>
<br/>
<输入类型= “提交” 值= “上传” 名称= “上传” id= “上传” />
</form>
</正文>
</html>
输出:
POST 和 GET 是我们在提交表单时可以使用的两种方法。在这里,当我们提交表单时,浏览器通过组合所有部分来流式传输内容。每个部分都定义了表单的字段。
@WebServlet (name = " FileUploadServletExample " , urlPatterns = { "/upload" })
@MultipartConfig
公共类 FileUploadServletExample 扩展 HttpServlet {
私有最终静态 记录器 LOGGER =
Logger.getLogger(FileUploadServlet.class .getCanonicalName ());
在上面的代码中,我们使用了两个注解,即具有属性 name 和 urlPatterns 的@WebServlet和@MultipartConfig。
@WebServlet 和 @MultipartConfig 注释用于定义 servlet 映射并指示 servlet 期望分别使用 multipart/form-data MIME 类型发出的请求。
servlet 执行以下步骤将文件数据存储到目标文件夹中:
servlet的saveFileToFolder方法从请求中检索位置和文件。
之后,它通过使用getFileName()从文件部分获取文件的名称
Servlet 创建FileOutputStream类的实例,并通过使用它,将 File 存储到指定位置。
try 部分处理将 File 存储到指定位置的代码,catch 部分处理无法存储 File 的过程的错误。
FileUploadServletExample.java
@WebServlet (name = " FileUploadServletExample " , urlPatterns = { "/upload" })
@MultipartConfig
公共类 FileUploadServletExample 扩展 HttpServlet {
private final static Logger LOGGER = Logger.getLogger(FileUploadServlet.class .getCanonicalName ());
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType( "text/html;charset=UTF-8" );
// 创建用于保存文件的路径组件
final String path = request.getParameter( "destination" );
final Part filePart = request.getPart( "file" );
最终 字符串文件名 = getFileName(filePart);
// 声明 OutputStream、InputStream 和 PrintWriter 类的实例
输出流 otpStream = null ;
输入流 iptStream = null ;
最后 的 PrintWriter writer = response.getWriter();
// try 部分处理将文件存储到指定位置的代码
试试 {
// 初始化 OutputStream 和 InputStream 类的实例
otpStream = new FileOutputStream( new File(path + File.separator + fileName));
iptStream = filePart.getInputStream();
int 读取 = 0 ;
// 初始化字节数组用于存储文件数据
最终字节[]字节= 新字节[ 1024 ];
// 使用 while 循环使用 iptStream 从文件中读取数据,并使用 writer 和 otpStream 写入目标文件夹
而 ((读取= iptStream.read(字节))!= - 1 ){
otpStream.write(字节, 0 ,读取);
}
writer.println( "新文件" +文件名+ "创建于" +路径);
LOGGER.log(Level.INFO, "文件{0}上传到 {1}" , new Object[]{fileName, path});
}
// catch 部分处理错误
捕捉 (FileNotFoundException fne){
writer.println( "您要么没有指定要上传的文件,要么正在尝试将文件上传到受保护或不存在的位置。" );
writer.println( "<br/>错误:" + fne.getMessage());
LOGGER.log(Level.SEVERE, "文件上传时出现问题。错误:{0}" , new Object[]{fne.getMessage()});
}
// finally 部分将关闭所有打开的类
最后 {
如果 (otpStream!= null ){
otpStream.close();
}
如果 (iptStream!= null ){
iptStream.close();
}
如果 (作家!= null ){
writer.close();
}
}
}
// getFileName() 方法从部件中获取文件名
私人 字符串getFileName(最后 一部分){
// 从部件中获取 header(content-disposition)
final String partHeader = part.getHeader( "content-disposition" );
LOGGER.log(Level.INFO, "Part Header = {0}" , partHeader);
// 从头部获取文件名的代码
for (字符串内容:part.getHeader(“内容处置” ).split(“;” )){
if (content.trim().startsWith( "文件名" )) {
返回 content.substring(content.indexOf( '=' ) + 1 ).trim().replace( "\"" , "" );
}
}
// 没有在头部获取文件名时返回null
返回空值;
}
}
为了构建、打包、部署和运行文件上传程序,我们可以使用 NetBeans、Eclipse 或 Ant。对于 NetBeans,我们使用以下步骤:
从文件中选择打开项目它会打开项目对话框。
从Open Project 对话框中,我们导航到tut-install/examples/web/
从该目录中,我们选择 fileupload 文件夹。
我们选中Open as Main Project复选框,然后单击Open Project
在 Projects 选项卡中,右键单击 fileupload 并选择 Deploy。
现在,我们导航到浏览器并输入以下 URL:
http://localhost:8080/fileupload/
输入 URL 并按回车键后,将打开我们在上面创建的 HTML 表单。我们浏览系统并选择一个文件将其上传到所需位置。在目标字段中,我们输入需要存储该文件的目录的路径。该目录应该已经在系统中创建并且必须是可写的。如果我们没有为目标字段设置任何内容并单击上传按钮,它将引发异常。
当我们点击上传按钮时,一个 POST 请求发送到 servlet,它会将文件复制到目标文件夹。
单击上传按钮后,我们进入指定目录并验证上传的文件是否存在。
以上就是关于“一文读懂Java怎么实现文件上传到文件夹”的介绍,大家如果想了解更多相关知识,不妨来关注一下极悦的Java极悦在线学习,里面的课程内容从入门到精通,细致全面,很适合没有基础的小伙伴学习,相信对大家会有所帮助的。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习