Java程序中的文件上傳和下載是非常常見(jiàn)且重要的功能,在網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)中也經(jīng)常出現(xiàn)。Java提供了許多API以實(shí)現(xiàn)文件上傳和下載的功能,包括Servlet API以及其他第三方庫(kù)。
文件上傳必須使用POST方法提交表單,并且表單的enctype屬性應(yīng)該設(shè)置為"multipart/form-data",這樣客戶端就可以上傳二進(jìn)制文件了。在Servlet中,我們可以通過(guò)request.getPart("file")方法獲取上傳文件的Part對(duì)象,然后使用Part對(duì)象的write()方法來(lái)保存上傳的文件。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart = request.getPart("file"); String fileName = filePart.getSubmittedFileName(); InputStream fileContent = filePart.getInputStream(); //save fileContent to disk }
文件下載則需要在服務(wù)器端設(shè)置文件的Content-Type以及Content-Disposition響應(yīng)頭,然后直接將文件輸出到客戶端。在Servlet中,我們可以使用response.setContentType()方法以及response.setHeader()方法來(lái)設(shè)置響應(yīng)頭,然后使用response.getOutputStream()方法獲取輸出流,將文件內(nèi)容輸出到客戶端。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filePath = "/path/to/file"; File file = new File(filePath); if (file.exists()) { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); InputStream inputStream = new FileInputStream(file); OutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int readLength; while((readLength = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, readLength); } inputStream.close(); outputStream.close(); } }
以上就是使用Java實(shí)現(xiàn)文件上傳和下載的基本方法。在實(shí)際開(kāi)發(fā)中,我們還需要注意文件大小、文件類型、文件安全性等問(wèn)題。