隨著互聯(lián)網(wǎng)的普及和云計(jì)算的興起,越來(lái)越多的網(wǎng)站需要提供用戶上傳圖片的功能。而對(duì)于Java開(kāi)發(fā)者而言,如何實(shí)現(xiàn)多圖片上傳和保存是一個(gè)很常見(jiàn)的問(wèn)題。
首先需要明確的是,Java自帶的圖片上傳功能只能針對(duì)單個(gè)文件進(jìn)行上傳,而對(duì)于多文件上傳,我們需要借助第三方庫(kù)或者自己進(jìn)行開(kāi)發(fā)。
示例代碼: public class UploadController extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); DiskFileItemFactory factory = new DiskFileItemFactory();// 創(chuàng)建一個(gè)文件上傳處理工廠 ServletFileUpload upload = new ServletFileUpload(factory);// 創(chuàng)建一個(gè)新的文件上傳處理器 upload.setSizeMax(100 * 1024 * 1024);// 設(shè)置允許用戶上傳文件大小為100MB Listitems;// 存放所有的上傳參數(shù)和上傳文件 try { items = upload.parseRequest(request);// 解析用戶請(qǐng)求 Map formFields = new HashMap (); List fileItems = new ArrayList (); for (FileItem item : items) {// 將上傳參數(shù)和上傳文件分類(lèi) if (item.isFormField()) formFields.put(item.getFieldName(), item.getString("UTF-8")); else fileItems.add(item); } for (FileItem item : fileItems) {// 處理每一個(gè)文件 // 獲取文件保存路徑 String filePath = request.getServletContext().getRealPath("/") + "upload/"; File folder = new File(filePath); if (!folder.exists()) folder.mkdirs(); String fileName = item.getName();// 獲取上傳文件名 fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);// 去掉上傳文件的路徑 File uploadedFile = new File(filePath + fileName);// 構(gòu)造一個(gè)保存文件的完整路徑 item.write(uploadedFile);// 保存文件 } out.print("文件上傳成功!"); } catch (FileUploadException e) { e.printStackTrace(); out.print("文件上傳失敗!"); } catch (Exception e) { e.printStackTrace(); out.print("文件上傳失?。?); } finally { out.close(); } } }
以上代碼使用了Apache Commons FileUpload庫(kù)來(lái)實(shí)現(xiàn)多文件上傳,具體實(shí)現(xiàn)步驟如下:
- 創(chuàng)建一個(gè)文件上傳處理工廠,指定文件大小限制;
- 創(chuàng)建一個(gè)新的文件上傳處理器;
- 解析用戶請(qǐng)求,將上傳參數(shù)和上傳文件分類(lèi);
- 處理每一個(gè)上傳文件,獲取并創(chuàng)建保存路徑,保存文件。
在實(shí)現(xiàn)多文件上傳之后,我們還需要對(duì)上傳的圖片進(jìn)行保存。保存圖片的方法因需求不同而各異,可以將圖片保存在服務(wù)器端的硬盤(pán)、數(shù)據(jù)庫(kù)或者云存儲(chǔ)空間中。在此不做具體介紹。
綜上所述,Java實(shí)現(xiàn)多文件上傳和保存需要借助第三方庫(kù)或者自己進(jìn)行開(kāi)發(fā),在實(shí)現(xiàn)之前需要明確需求,并仔細(xì)設(shè)計(jì)代碼邏輯。