2024年5月29日发(作者:)
DiskFileItemFactory实现文件上传FileInputStream
下载
FileInputStream 是 Java 输入流的一种,用于从文件中读取数据。
它是字节流,适用于读取二进制文件。
1.文件上传
```java
import tException;
import artConfig;
import vlet;
import ;
import ption;
import ;
public class FileUploadServlet extends HttpServlet
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
boolean isMultipart =
ipartContent(request);
if (isMultipart)
FileItemFactory factory = new DiskFileItemFactory(;
ServletFileUpload upload = new ServletFileUpload(factory);
try
List
for (FileItem item : items)
if (!Field() { // 如果是文件字段
String fileName = e(;
String filePath = "/path/to/save/uploads/" + fileName; //
保存文件的路径
File file = new File(filePath);
(file); // 将文件保存到指定路径
ter(.write("File uploaded successfully.");
}
}
} catch (Exception e)
ter(.write("File upload failed.");
}
}
}
```
上述代码中,首先判断请求是否为多部分内容(即文件上传)。然后
创建一个 DiskFileItemFactory 对象和一个 ServletFileUpload 对象。
通过调用 `equest(request)` 解析请求,得到一个包含上
传的文件字段的 FileItem 列表。遍历 FileItem 列表,如果是文件字段,
则获取文件名和保存路径,创建一个 File 对象,最后将文件保存到指定
路径。
```java
import ;
import putStream;
import ption;
import Stream;
import tException;
import vlet;
public class FileDownloadServlet extends HttpServlet
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
String fileName = "";
File file = new File(filePath);
if (()
tentType("application/octet-stream");
tentLength((int) ();
der("Content-Disposition", "attachment;
filename="" + fileName + """);
FileInputStream fis = new FileInputStream(file);
OutputStream os = putStream(;
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = (buffer)) != -1)
(buffer, 0, bytesRead);
}
(;
(;
} else
ter(.write("File not found.");
}
}
```


发布评论