实现文件上传的实现思路:
1.配置web.xml创建UploadServlet
2.Form的method设置为post;enctype配置为multipart/form-data
3.保存上传文件
文件上传后台实现步骤:
1.获取request当中的流信息,保存到临时文件
2.从临时文件当中得到长传的文件名,及文件内容的起止位置
3.根据文件的起止位置,读取上传文件的内容保存到本地
1.代码:
//从request当中获取流信息
InputStream fileSource = req.getInputStream();
String tempFileName = "E:/tempFile";
//tempFile指向临时文件
File tempFile = new File(tempFileName);
//outputStream文件输出流指向这个临时文件
FileOutputStream outputStream = new FileOutputStream(tempFile);
byte b[] = new byte[1024];
int n;
while((n=fileSource.read(b))!=-1){
outputStream.write(b,0,n);
}
//关闭输出流,输入流
outputStream.close();
fileSource.close();
2.代码:
//获取文件的名称
RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");
randomFile.readLine();
String str = randomFile.readLine();
int beginIndex = str.lastIndexOf("\\")+1;//第二行最后一个反斜杠加1的位置;
int endIndex = str.lastIndexOf("\"");
String filename = str.substring(beginIndex,endIndex);
System.out.println("filename:"+filename);
//重新定位文件指针到文件头
randomFile.seek(0);
long startPosition = 0;
int i = 1;
//获取文件内容的开始位置
//开始为位置为第4个换行符之后的那个位置
while((n=randomFile.readByte())!=-1&&i<=4){
if(n=='\n')
{
startPosition = randomFile.getFilePointer();
i++;
}
startPosition = startPosition - 1;
}
//获取文件内容结束位置
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++;
}
}
endPosition = endPosition - 1;
//设置保存上传文件的路径
String realPath = getServletContext().getRealPath("/")+"images";
File fileupload = new File(realPath);
if(!fileupload.exists()){
fileupload.mkdir();
}
File saveFile = new File(realPath,filename);
RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
//从临时文件当中读取文件内容(根据起止位置获取)
randomFile.seek(startPosition);
while(startPosition<endPosition){
randomAccessFile.write(randomFile.readByte());
startPosition = randomFile.getFilePointer();
}
//关闭输出流,删除临时文件
randomAccessFile.close();
randomFile.close();
tempFile.delete();