?? uploadservice.java
字號:
if (fileTemp.isFile()) {
//單個文件大小
intFileCount++;
//文件大小自加
lngSize = lngSize + fileTemp.length();
}
}
}
fileInfo[0] = String.valueOf(intFileCount);
// System.out.println("總的文件大小 : " + lngSize + "----總文件數 : " +
// fileInfo[0]);
fileInfo[1] = String.valueOf(lngSize);
return fileInfo;
}
/**
* 對文件有效性驗證
*/
private int validateFile(File file) {
/**
* 單個文件大小
*/
long fileSize = fileParam.getFileSize();
if (fileSize == 0) {
return -1;
}
else {
if (file.length() > fileSize * 1024)
return 2;
}
/**
* 總大小
*/
long totalSize = fileParam.getFileTotalSize();
if (totalSize == 0) {
return -1;
}
else {
if ((Long.valueOf(localFile()[1]).longValue() + file.length()) > totalSize * 1024)
return 3;
}
return -1;
}
/**
* 獲取輸入框里的值
*/
public Map getInputMap() {
return this.map;
}
/**
* 往文件系統寫入文件
*/
public int readWriteFile(HttpServletRequest request)
throws ServletException, IOException {
setCharacterEncoding(request.getCharacterEncoding());
// System.out.println("contentType = " + request.getContentType());
setBoundary(request.getContentType());
// System.out.println("boundary = " + boundary);
File file = null;
/**
* 得到文件流
*/
ServletInputStream servletInputStream = request.getInputStream();
String line = "";
/**
* 獲取字符串進行處理(直到讀完為止)以行讀取
*/
while ((line = readLine(readByte, readCount, servletInputStream,
CharacterEncoding)) != null) {
//System.out.println("headLine = " + line);
/**
* 查找字符串中的filename[filename代表是上傳的字符串]
*/
int i = line.indexOf("filename=");
/**
* 獲取子串 ("-1"代表沒有找到)
*/
if (i > -1) {
String name = getName(line);
//取得"filename="后面對應的子串
String filename = line.substring(i + 10, line.length() - 3);
// System.out.println("文件路徑 filename = " + filename);
filename = getFilename(filename);
// System.out.println("得到上傳文件的文件全名 : " + filename);
if (filename != null) {
// 判斷文件個數是否正確
//將這里的變量賦值給fileName(如果外部不想改文件名就直接用這個文件名)
String fileprefix = filename.substring(0, filename
.indexOf("."));
// System.out.println("文件名前綴為 : " + fileprefix);
String fileSuffix = filename.substring(filename
.indexOf(".") + 1, filename.length());
// System.out.println("文件名后綴文件標識為 : " + fileSuffix);
// 上傳的文件是否被允許(文件類型)
if (validateFileSuffix(fileSuffix) == -1) {
//設置文件名(不改變情況下調用的文件名)
fileName = fileprefix;
// 判斷是否更改文件名
file = setFilePath(fileSuffix);
int validate = validateFile(file);
// 文件是否達到上限
int totalNum = fileParam.getFileNum();
//System.out.print("validate = " + validate);
// System.out.println("文件總數 : "+totalNum);
// totalNum = 0 代表沒有任何限制
if (totalNum == 0) {
writeFile(file, servletInputStream,
CharacterEncoding);
setInputContent(name, buildFilePath);
if (validate != -1) {
file.delete();
return validate;
}
}
else {
if (totalNum > Integer
.parseInt(localFile()[0])-1) {
//驗證文件有效性
writeFile(file, servletInputStream,
CharacterEncoding);
setInputContent(name, buildFilePath);
if (validate != -1) {
file.delete();
return validate;
}
}
else {
file.delete();
return 4;
}
}
/**
*圖縮放處理
*/
if(fileParam.isPic()){
JPEGHandle jpegHandle = new JPEGHandle(file,fileParam.getJpeg(),contextPath);
jpegHandle.encoderPic();
}
}
else {
return 1;
}
}
}
/**
* 處理非文件的內容
*/
int j = line.indexOf("name=\"");
if (j > 0 && i < 0) {
String inputName = line.substring(j + 6, line.length() - 3);
//System.out.println("inputName = " + inputName);
String inputContent = "";
//讀過一空行
line = readLine(readByte, readCount, servletInputStream,
CharacterEncoding);
while ((line = readLine(readByte, readCount,
servletInputStream, CharacterEncoding)).indexOf(boundary) < 0) {
//去結尾部分的/r/n符號(回車換行符)
inputContent = line.substring(0, line.length() - 2);
//System.out.println("inputContent = " + inputContent);
}
setInputContent(inputName, inputContent);
}
}
return -1;
}
/**
* 輸入名和輸入的值
*/
private void setInputContent(String inputName, String inputContent) {
Input inputField = new Input();
inputField.setInputName(inputName);
inputField.setInputContent(inputContent);
map.put(inputName,inputContent);
}
private void writeFile(File file, ServletInputStream servletInputStream,String CharacterEncoding) throws ServletException, IOException {
String line = null;
FileOutputStream fileOutputStream = new FileOutputStream(file);
//讀入下一行,該行為寫入內容類型行
String lineContent = readLine(readByte, readCount, servletInputStream,
CharacterEncoding);
/**
* 讀入文件類型Content-Type
*/
// 表明讀入的是個文件
if (lineContent.indexOf("Content-Type") >= 0) {
// 讀入一個空行
readLine(readByte, readCount, servletInputStream, CharacterEncoding);
}
//循環從輸入流讀入并寫入文件 readCount[0]為實際寫入的字符數
while ((lineContent = readLine(readByte, readCount,
servletInputStream, CharacterEncoding)) != null) {
// System.out.println("lineContent2 = " + lineContent + "---- readByte[0] = " + readByte[0]);
// 如果該行包含boundary標志,就跳出循環
if (lineContent.indexOf(boundary) == 0 && readByte[0] == 45) {
break;
}
if(line != null){
fileOutputStream.write(writeByte, 0, writeCount[0]);
fileOutputStream.flush();
}
// System.out.println("line = " + line + " writeByte[0] " + writeByte[0]);
//readCount[0]為實際讀入的字符數
line = readLine(writeByte, writeCount, servletInputStream, CharacterEncoding);
// 最后一行就跳出讓下面的處理
if(line == null || line.indexOf(boundary) != -1 && writeByte[0] == 45)
break;
fileOutputStream.write(readByte, 0, readCount[0]);
fileOutputStream.flush();
}
//對最后一行進行處理
if(line != null && writeByte[0] != 45 && writeCount[0] > 2) {
fileOutputStream.write(writeByte, 0, writeCount[0] - 2);
}
if(lineContent != null && readByte[0] != 45 && readCount[0] > 2){
fileOutputStream.write(readByte, 0, readCount[0] - 2);
}
fileOutputStream.close();
}
/**
* --------------參考字符 reqeustmultipart/form-data;
* boundary=---------------------------7d42fa316058e
* 44-----------------------------7d42fa316058e Content-Disposition:
* form-data; name="userPhoto"; filename="C:\Documents and
* Settings\sky\Desktop\111.txt" Content-Type: text/plain
*
* HELLO! -----------------------------7d42fa316058e Content-Disposition:
* form-data; name="photoInfo"
*
* abc -----------------------------7d42fa316058e--
*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -