亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Servlet處理上傳的多個文件要怎么辦

采用Servlet方法,獲取文件內容位置,讀四行???退一行???這個針對一個文件沒什么大問題,要是多個文件呢?出現其他情況呢?有沒有靠譜一點的方法。。。試了一下用正則表達式可以提取上傳多個文本文件的內容,用正則表達式就要用字符流,然后就不知道怎么處理字節形式的圖片內容,出現了編碼的問題。傷心。 _(:3 」∠)_

//獲取臨時文件輸入流
FileInputStream?in?=?new?FileInputStream(tempFile);
InputStreamReader?reader?=?new?InputStreamReader(in);
BufferedReader?br?=?new?BufferedReader(reader);

//將輸入流數據存到字符串中
StringBuffer?sb?=?new?StringBuffer();
String?result?=?"";
String?content;
String?temp?=?br.readLine();
while((content?=?br.readLine())?!=?null)?{
	sb.append(content?+?"\r\n");
}
result?=?sb.toString();
System.out.println(result);
br.close();

//將保存有多個文件信息的字符串分割為多塊
String[]?items?=?result.split(temp);
for?(String?item?:?items)?{
	//獲取文件名并創建文件
	String?regexOfFileName?=?"filename=\"([^\"]*)";
	Pattern?patternOfFileName?=?Pattern.compile(regexOfFileName);
	Matcher?matcherOfFileName?=?patternOfFileName.matcher(item);
	String?fileName?=?"";
	FileWriter?out?=?null;
	if(matcherOfFileName.find())?{
		fileName?=?matcherOfFileName.group(1);
		System.out.println(fileName);
		File?saveFile?=?new?File(path,?fileName);
		out?=?new?FileWriter(saveFile);
	}
	//獲取文件內容并保存
	String?regexOfFileData?=?"Content-Type[^\n]*[\r\n]*([\\s\\S]*)";
	Pattern?patternOfFileData?=?Pattern.compile(regexOfFileData);
	Matcher?matcherOfFileData?=?patternOfFileData.matcher(item);
	String?fileData?=?"";
	if(matcherOfFileData.find())?{
		fileData?=?matcherOfFileData.group(1);
		fileData?=?fileData.substring(0,?fileData.length()?-?2);
		System.out.println(fileData);
		
		out.write(fileData);
		out.close();
	}
}


正在回答

2 回答

試試看把字符拆成字節來讀,然后自己再寫代碼解析出字符也是可以的試試用URLDecode解碼試試,注意編碼一致性

0 回復 有任何疑惑可以回復我~
#1

Xy丶 提問者

和URLDecode沒有什么關系吧,字符拆成字節用到了
2016-04-17 回復 有任何疑惑可以回復我~

換了一種方法,可以處理多個文件,可以是文本,可以是圖片或者其他。

//讀取臨時文件
RandomAccessFile?randomOfTempFile?=?new?RandomAccessFile(tempFile,?"r");
//temp為post請求內容分隔符
String?temp?=?randomOfTempFile.readLine();
String?content;
while((content?=?randomOfTempFile.readLine())?!=?null)?{
	//解決中文文件名亂碼問題
	content?=?new?String(content.getBytes("ISO-8859-1"),?"utf-8");
	if(content.contains("filename"))?{
		System.out.println(content);
		//獲取文件名
		String?regexOfFileName?=?"filename=\"([^\"]*)";
		Pattern?patternOfFileName?=?Pattern.compile(regexOfFileName);
		Matcher?matcherOfFileName?=?patternOfFileName.matcher(content);
		String?fileName?=?"";
		File?saveFile?=?null;
		if(matcherOfFileName.find())?{
			fileName?=?matcherOfFileName.group(1);
			System.out.println(fileName);
			saveFile?=?new?File(path,?fileName);
		}
		//獲取文件內容起始結束位置
		randomOfTempFile.readLine();
		randomOfTempFile.readLine();
		long?startPosition?=?randomOfTempFile.getFilePointer();
		long?endPosition;
		while(true)?{
			endPosition?=?randomOfTempFile.getFilePointer();
			String?tempStr?=?randomOfTempFile.readLine();
			if?(tempStr?!=?null?&&?tempStr.contains(temp))?{
				break;
			}
		}
		//保存文件
		randomOfTempFile.seek(startPosition);
		RandomAccessFile?randomOfSaveFile?=?new?RandomAccessFile(saveFile,?"rw");
		while(startPosition?<?endPosition){
			randomOfSaveFile.write(randomOfTempFile.readByte());
			startPosition?=?randomOfTempFile.getFilePointer();
		}
		randomOfSaveFile.close();
	}
}
randomOfTempFile.close();


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

Servlet處理上傳的多個文件要怎么辦

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號