天天看點

JSP 批量上傳檔案

自己寫的一個JSP批量上傳指定格式的類。

package com.cdms.file;

import java.io.File;

import java.io.FileOutputStream;

import java.util.ArrayList;

import javax.servlet.ServletInputStream;

import javax.servlet.http.HttpServletRequest;

public class UploadFile

{

private final String FILE_PATH = "D://temp//";

private ArrayList<File> mUploadFiles = new ArrayList<File>();

public UploadFile()

{

File file = new File(FILE_PATH);

if(!file.exists())

{

file.mkdirs();

}

}

/**

* 批量上傳檔案

*

* @param request

* @param fileFormat<br />限定檔案的格式

* @return

*/

public boolean uploadFiles(HttpServletRequest request, String[] fileFormat)

{

try

{

request.setCharacterEncoding("UTF-8");

byte[] buff = new byte[1024 << 10];

int size = 0;

String seprator = "";

String value = "";

String fileName = "";

boolean isContinueRead = true;

ServletInputStream reader = request.getInputStream();

size = reader.readLine(buff, 0, buff.length); // 讀取檔案分隔符

if (size == -1)

{

return false;

}

seprator = new String(buff, 0, size);

while (isContinueRead)

{

size = reader.readLine(buff, 0, buff.length);// 讀取檔案資訊頭資訊

value = new String(buff, 0, size);

if ((fileName = getDefaultFileName(value, fileFormat)) == null)

{

break;

}

size = reader.readLine(buff, 0, buff.length); // 讀取檔案協定頭資訊

value = new String(buff, 0, size);

if (value.indexOf("Content-Type:") == -1)

{

continue;

}

reader.readLine(buff, 0, buff.length); // 去掉空行

File saveFile = null;

FileOutputStream writer = null;

if (!fileName.equals(""))

{

saveFile = new File(FILE_PATH + fileName);

writer = new FileOutputStream(saveFile);

mUploadFiles.add(saveFile);

}

while (true)

{

size = reader.readLine(buff, 0, buff.length);

if (size == -1)

{

isContinueRead = false;

break;

}

value = new String(buff, 0, size);

if (value.startsWith(seprator))

{

break;

}

if (writer != null)

{

writer.write(buff, 0, size);

}

}

if (writer != null)

{

writer.close();

}

}

reader.close();

} catch (Exception e)

{

e.printStackTrace();

}

return mUploadFiles.size() > 0;

}

/**

* 判斷檔案格式并擷取上傳檔案的檔案名

*

* @param context

* @param fileFormat

* @return

*/

private String getDefaultFileName(String context, String[] fileFormat)

{

int i, index = context.indexOf("filename=/"");

if (index == -1)

{

return null;

}

String filePath = context.substring(index + 10, context.lastIndexOf('/"'));

if (filePath.equals(""))

{

return "";

}

String fileName = new File(filePath).getName();

index = fileName.lastIndexOf('.');

String format = (index != -1) ? fileName.substring(index + 1) : "";

for (i = 0; i < fileFormat.length; i++)

{

if (format.equals(fileFormat[i]))

{

break;

}

}

if (i == fileFormat.length)

{

return "";

}

return fileName;

}

/**

* 擷取上傳成功的所有檔案

*

* @return

*/

public ArrayList<File> getFileName()

{

return mUploadFiles;

}

}