在Java中,可以使用Apache Commons FileUpload庫(kù)來(lái)實(shí)現(xiàn)文件的上傳,使用Java的IO流來(lái)實(shí)現(xiàn)文件的下載。
文件上傳的步驟如下:
enctype="multipart/form-data"
來(lái)指定表單支持文件上傳。ServletFileUpload
類來(lái)解析上傳的文件數(shù)據(jù)。FileItem
對(duì)象的write
方法將文件寫(xiě)入磁盤(pán)。以下是一個(gè)簡(jiǎn)單的文件上傳的示例代碼:
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.FileItem;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 檢查請(qǐng)求是否為文件上傳
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
response.getWriter().println("不是文件上傳請(qǐng)求");
return;
}
// 創(chuàng)建文件上傳工廠類和ServletFileUpload對(duì)象
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 解析上傳的文件數(shù)據(jù)
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
// 判斷是否為普通表單字段
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString();
// 處理普通表單字段數(shù)據(jù)
} else {
// 是文件字段,獲取文件名和內(nèi)容
String fileName = item.getName();
InputStream fileContent = item.getInputStream();
// 將文件寫(xiě)入磁盤(pán)或處理文件內(nèi)容
}
}
response.getWriter().println("文件上傳成功");
} catch (Exception e) {
response.getWriter().println("文件上傳失敗: " + e.getMessage());
}
}
}
文件下載的步驟如下:
ServletContext
對(duì)象獲取要下載的文件路徑。以下是一個(gè)簡(jiǎn)單的文件下載的示例代碼:
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 獲取要下載的文件路徑
String filePath = getServletContext().getRealPath("/path/to/file");
// 設(shè)置響應(yīng)的Content-Type和Content-Disposition頭
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 讀取文件內(nèi)容并將內(nèi)容寫(xiě)入響應(yīng)的輸出流
InputStream fileContent = new FileInputStream(filePath);
OutputStream responseOutput = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = fileContent.read(buffer)) != -1) {
responseOutput.write(buffer, 0, bytesRead);
}
fileContent.close();
responseOutput.close();
}
}
請(qǐng)注意修改代碼中的文件路徑和文件名,以適應(yīng)你的實(shí)際情況。