Java可以通過以下步驟實現文件的上傳與下載:
文件上傳:
創建一個HTML表單,包含一個文件選擇框和一個提交按鈕。
使用Servlet或Spring MVC等后端技術,接收HTTP請求,并從請求中獲取上傳的文件。
使用FileOutputStream將文件保存到指定的目錄中。
文件下載:
使用Servlet或Spring MVC等后端技術,接收HTTP請求,并獲取要下載的文件的路徑。
使用FileInputStream讀取要下載的文件。
設置HTTP響應的ContentType為"application/octet-stream",以便告訴瀏覽器該文件是二進制文件,需要下載。
設置HTTP響應的Content-Disposition頭部,指定文件名。
將文件內容寫入HTTP響應的輸出流中,完成下載。
以下是一個使用Servlet實現文件上傳與下載的示例代碼:
文件上傳的Servlet:
@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file"); // 從請求中獲取上傳的文件
String fileName = filePart.getSubmittedFileName(); // 獲取文件名
InputStream fileContent = filePart.getInputStream(); // 獲取文件內容
// 將文件保存到指定目錄中
Files.copy(fileContent, Paths.get("upload/" + fileName));
}
}
文件下載的Servlet:
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("file"); // 獲取要下載的文件名
String filePath = "upload/" + fileName; // 文件路徑
File file = new File(filePath);
if (file.exists()) {
// 設置響應的ContentType為"application/octet-stream"
response.setContentType("application/octet-stream");
// 設置Content-Disposition頭部,指定文件名
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 將文件內容寫入響應的輸出流中
try (InputStream fileContent = new FileInputStream(file)) {
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileContent.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 文件不存在,返回404錯誤
}
}
}
在上述代碼中,文件上傳會將文件保存到"upload/"目錄下,文件下載會從"upload/"目錄中讀取文件內容并寫入HTTP響應的輸出流中,實現文件的下載。