共計 2224 個字符,預計需要花費 6 分鐘才能閱讀完成。
在 Java 中,可以使用 Apache Commons FileUpload 庫來實現文件的上傳,使用 Java 的 IO 流來實現文件的下載。
文件上傳的步驟如下:
- 在 HTML 表單中,使用
enctype="multipart/form-data"
來指定表單支持文件上傳。 - 在 Java 代碼中,創建一個 Servlet 來接收文件上傳請求。
- 使用 Apache Commons FileUpload 庫的
ServletFileUpload
類來解析上傳的文件數據。 - 遍歷解析出的文件列表,使用
FileItem
對象的write
方法將文件寫入磁盤。
以下是一個簡單的文件上傳的示例代碼:
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 {// 檢查請求是否為文件上傳
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {response.getWriter().println(" 不是文件上傳請求 ");
return;
}
// 創建文件上傳工廠類和 ServletFileUpload 對象
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {// 解析上傳的文件數據
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {// 判斷是否為普通表單字段
if (item.isFormField()) {String fieldName = item.getFieldName();
String fieldValue = item.getString();
// 處理普通表單字段數據
} else {// 是文件字段,獲取文件名和內容
String fileName = item.getName();
InputStream fileContent = item.getInputStream();
// 將文件寫入磁盤或處理文件內容
}
}
response.getWriter().println(" 文件上傳成功 ");
} catch (Exception e) {response.getWriter().println(" 文件上傳失敗: " + e.getMessage());
}
}
}
文件下載的步驟如下:
- 創建一個 Servlet 來處理文件下載請求。
- 在 Servlet 中,通過
ServletContext
對象獲取要下載的文件路徑。 - 使用 Java 的 IO 流讀取文件內容,并將文件內容寫入響應的輸出流。
以下是一個簡單的文件下載的示例代碼:
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 獲取要下載的文件路徑
String filePath = getServletContext().getRealPath("/path/to/file");
// 設置響應的 Content-Type 和 Content-Disposition 頭
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 讀取文件內容并將內容寫入響應的輸出流
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();}
}
請注意修改代碼中的文件路徑和文件名,以適應你的實際情況。
丸趣 TV 網 – 提供最優質的資源集合!
正文完