国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用JavaBean實現文件上載(6)

2019-11-18 13:37:45
字體:
來源:轉載
供稿:網友

  用javaBean實現文件上載(6)

   現在,我們首先來看看提取文件內容的代碼。

   文件路徑包含在“Content-Disposition”的后面。為提取文件路徑和文件名字,doUpload方法調用了setFilename私有方法。setFilename方法提取出文件路徑和文件名字信息,然后把它們賦值給filepath和filename域。調用setFilename方法之后,filename域應該不再是null。假如此時filename域仍然是null,則說明碰到了問題,doUpload方法直接返回。

if (filename==null)
return;

   “Content-Disposition”行之后的下一行是內容類型行。因此,doUpload方法接著調用readLine方法,然后調用setContentType私有方法。setContentType方法和setFilename方法相似,它從原始字節數據中提取出上載文件的內容類型并保存到contentType域。

   緊接內容類型行的下一行是空行,因此程序再調用了一次readLine方法。

i = in.readLine(line, 0, 128);

   接下來開始了真正的文件內容。我們先應該做好通過PRintWriter對象把文件寫入磁盤的預備。

PrintWriter pw = new PrintWriter(new BufferedWriter(
new FileWriter(
( savePath==null? "" : savePath ) + filename
)));

   上載文件保存到哪個位置取決于savePath域是否已經設置。假如savePath域沒有設置,它的值是null,則文件將被保存到默認目錄;假如savePath域已經設置,它的值不是null,則上載的文件被保存到它所指定的目錄。

   然后我們就可以提取文件的內容。具體方法是使用while循環,每次循環讀入一行內容并通過PrintWriter的輸出方法把它寫入磁盤。但我們知道,文件的最后一行包含兩個回車換行符號,所以保存到磁盤的字節數據不應該包含這兩個字符。因此,假如讀入的行不是文件的最后一行,我們把所有讀到的字節數據寫入磁盤;假如讀入的行已經是文件的最后一行,寫入磁盤的字節數據要減去最后兩個字符。
   然而,我們并不知道文件的大小,我們只知道緊接文件內容的下一行又是一個分界符;或者,假如文件是最后一個Html表單元素,接下來的一行是分界符加上兩個短劃線字符。因此,只要檢查下一行內容是否是分界符,我們就知道了何時應該結束while循環。這就是前面說分界符很重要的原因,在這里我們必須用到分界符。

   雖然我們可以讀取下一行內容然后用startsWith方法檢查它是否是一個分界符,然而,由于字符串操作的開銷非常大,為了減少字符串操作,我們比較readLine讀入的字節數組的長度。后者應該等于boundaryLength + 2;或者,假如它是HttpServletRequest對象中的最后一行,由于多出了最后兩個短劃線字符,它應該等于boundaryLength + 4。由于一行內容即使不是分界符也可以和分界符一樣長,當長度匹配之后我們又將它與分界符比較。這就是前面提到boundaryLength很重要的原因了。

   整個處理過程的實現代碼如下:

while (i != -1 && !newLine.startsWith(boundary)) {
i = in.readLine(line, 0, 128);
if ((i==boundaryLength+2 i==boundaryLength+4)
&& (new String(line, 0, i).startsWith(boundary)))
pw.print(newLine.substring(0, newLine.length()-2));
else
pw.print(newLine);
newLine = new String(line, 0, i);
}

把文件內容保存到磁盤之后,我們關閉了PrintWriter。

pw.close();

   非文件的表單元素也可以用類似的方法提取。不同之處在于,此時我們不再把數據寫入磁盤,而是把名字-值對保存到Dictionary對象。

fields.put(fieldName, fieldValue.toString());

byte[] line = new byte[128];

(全文完)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂伦春自治旗| 澄江县| 嫩江县| 年辖:市辖区| 收藏| 搜索| 晋城| 库尔勒市| 铁力市| 海林市| 玛曲县| 揭阳市| 平陆县| 错那县| 廊坊市| 陇西县| 庆云县| 攀枝花市| 句容市| 略阳县| 杭州市| 新龙县| 朔州市| 信丰县| 焦作市| 荃湾区| 轮台县| 花莲县| 府谷县| 自贡市| 铜鼓县| 宁南县| 息烽县| 和顺县| 宾阳县| 邢台市| 利津县| 南漳县| 建始县| 安溪县| 兴隆县|