利用Jakarta commons fileupload組件實(shí)現(xiàn)多文件上傳首先,需要到其官網(wǎng)上下載最新的jar包及其依賴的jar包,,然后可以參考一下它的user guide,,很簡單,想信大家都能看懂,,這里就把主要的內(nèi)容提一下(相當(dāng)于一個(gè)刪減的翻譯),。 一.基本原理 FileUpload組件將頁面提交的所有元素(普通form表單域,如text和文件域file)都看作一樣的FileItem,,這樣上傳頁面提交的request請(qǐng)求也就是一個(gè)FileItem的有序組合,,F(xiàn)ileUpload組件可以解析該request,并返回一個(gè)一個(gè)的FileItem,。而對(duì)每一個(gè)FileItem,,F(xiàn)ileUpload組件可以判斷出它是普通form表單域還是文件file域,從而根據(jù)不同的類型,,采取不同的操作--如果是表單域,,就讀出其值,如果是文件域,,就保存文件到服務(wù)器硬盤上或者內(nèi)存中,。
二.具體實(shí)現(xiàn)對(duì)一個(gè)HttpRequest請(qǐng)求,我們要判斷該請(qǐng)求是否是文件上傳的請(qǐng)求 // Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request); 如果確實(shí)是文件上傳的請(qǐng)求,,我們?nèi)绾谓馕鲈搑equest呢,? 至此我們已經(jīng)的到了FileItem的list,對(duì)每個(gè)Item的處理要考慮是標(biāo)準(zhǔn)的form表單域還是上傳文件file域,然后做不同的處理,,可以通過以下方式實(shí)現(xiàn): // Process the uploaded items
Iterator iter = items.iterator(); while (iter.hasNext()) ...{ FileItem item = (FileItem) iter.next(); if (item.isFormField()) ...{ processFormField(item); } else ...{ processUploadedFile(item); } } // Process a regular form field
if (item.isFormField()) ...{ String name = item.getFieldName(); String value = item.getString(); ... } // Process a file upload
if (!item.isFormField()) ...{ String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); ... } File uploadedFile = new File(...);
item.write(uploadedFile); 在下一篇文章中,,我會(huì)對(duì)commons FileUpload組件稍作包裝,,并做個(gè)簡單的demo Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1625754 |
|