自己寫的一個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;
}
}