Servlet 实现文件的上传与下载 (四)

2014-11-24 10:14:31 · 作者: · 浏览: 1
ame=\"upload\"")){
}
String filePath = _line;
String filename = filePath.replace("Content-Disposition: form-data; name=\"upload\"; filename=\"", "").replace("\"","");
filename=codeString(filename);
randomFile.seek(0);
return filename;
}
/**
* 获取上传文件的开始位置
* 开始位置会因为from 表单的参数不同而不同
* 如果from表单只上传文件是从第四行开始
* 本例from表单还有一个title的input , 所以从第八行开始。每多一个参数就加四行。
* @param randomFile
* @return 上传文件的开始位置
* @throws IOException
*/
private long getFileEnterPosition(RandomAccessFile randomFile)throws IOException{
long enterPosition = 0;
int forth = 1;
int n ;
while((n=randomFile.readByte())!=-1&&(forth<=8)){
if(n=='\n'){
enterPosition = randomFile.getFilePointer();
forth++;
}
}
return enterPosition;
}
/**
* 获取上传文件的结束位置
* 结束位置会因为文件类型不同,而不同
* 压缩包是倒数第二行后
* @param randomFile
* @return 文件的结束位置
* @throws IOException
*/
private long getFileEndPosition(RandomAccessFile randomFile)throws IOException{
randomFile.seek(randomFile.length());
long endPosition = randomFile.getFilePointer();
int j = 1;
while((endPosition>=0)&&(j<=2)){
endPosition--;
randomFile.seek(endPosition);
if(randomFile.readByte()=='\n'){
j++;
}
}
return endPosition;
}
/**
* 检查要保存文件的文件夹是否存在
*/
private void checkFold(){
File file = new File(this.fileFolder);
if (!file.exists()){
file.mkdirs();
}
}
/**
* 将临时文件解析后存放到指定的文件存放目录
* @param randomFile
* @param forthEnterPosition
* @param filename
* @return fileSize
* @throws IOException
*/
private long saveFile(RandomAccessFile randomFile,String filename)throws IOException{
File saveFile = new File(this.fileFolder,filename);
RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
long forthEnterPosition = getFileEnterPosition(randomFile);
long endPosition = getFileEndPosition(randomFile);
//从上传文件数据的开始位置到结束位置,把数据写入到要保存的文件中
randomFile.seek(forthEnterPosition);
long startPoint = randomFile.getFilePointer();
while(startPoint
randomAccessFile.write(randomFile.readByte());
startPoint = randomFile.getFilePointer();
}
long fileSize = randomAccessFile.length();
randomAccessFile.close();
return fileSize;
}
}
接着是下载的Servlet代码
[java]
mport java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Download extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String FILEDIR="files/_file";
private String fileFolder; //存文件的目录
public Download() {
super();
}
public void destroy() {
super.destroy();
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
thr