?? fileuploadbean.java
字號:
package myPk;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletException;
public class FileUploadBean {
private static String newline = "\r\n"; //設定換行符
private String uploadDirectory = "."; //默認的保存位置
private String ContentType = ""; //文件類型
private String CharacterEncoding = ""; //編碼格式
private String sFileName=""; //文件名
private String sFullFileName=""; //帶尾綴的文件名
//設定文件要保存的名字(不含尾綴)
public void setFileName(String s){
sFileName=s;
}
//獲取帶尾綴的文件名
public String getFullFileName(){
return sFullFileName;
}
//設定文件要保存在服務器中的位置
public void setUploadDirectory(String s){
uploadDirectory = s;
}
//提取文件名,本方法是把用戶上傳的文件按照原名保存
private String getFileName(String s){
String tem=null;
int i = s.lastIndexOf("\\");
if(i < 0 || i >= s.length() - 1){
i = s.lastIndexOf("/");
if(i < 0 || i >= s.length() - 1)
tem=s;
}
else
tem=s.substring(i + 1);
if(sFileName!="")
{
tem=sFileName+s.substring(s.lastIndexOf("."));
}
sFullFileName=tem;
return tem;
}
//得到content-type
public void setContentType(String s){
ContentType = s;
int j;
if((j = ContentType.indexOf("boundary=")) != -1){
ContentType = ContentType.substring(j + 9);
ContentType = "--" + ContentType;
}
}
//得到文件編碼格式
public void setCharacterEncoding(String s){
CharacterEncoding = s;
}
public void uploadFile( HttpServletRequest req) throws ServletException, IOException{
setCharacterEncoding(req.getCharacterEncoding());
setContentType(req.getContentType());
uploadFile(req.getInputStream());
}
public void uploadFile( ServletInputStream servletinputstream) throws ServletException, IOException{
String s5 = null;
String filename = null;
byte Linebyte[] = new byte[4096];
byte outLinebyte[] = new byte[4096];
int ai[] = new int[1];
int ai1[] = new int[1];
String line;
//得到文件名
while((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
int i = line.indexOf("filename=");
if(i >= 0){
line = line.substring(i + 10);
if((i = line.indexOf("\"")) > 0)
line = line.substring(0, i);
break;
}
}
filename = line;
if(filename != null && !filename.equals("\"")){
filename = getFileName(filename);
String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
if(sContentType.indexOf("Content-Type") >= 0)
readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
//建立新文件的文件句柄
File file = new File(uploadDirectory, filename);
//建立生成新文件的輸出流
FileOutputStream fileoutputstream = new FileOutputStream(file);
while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
if(sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45)
break;
if(s5 != null){
//寫入新文件
fileoutputstream.write(outLinebyte, 0, ai1[0]);
fileoutputstream.flush();
}
s5 = readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding);
if(s5 == null || s5.indexOf(ContentType) == 0 && outLinebyte[0] == 45)
break;
fileoutputstream.write(Linebyte, 0, ai[0]);
fileoutputstream.flush();
}
byte byte0;
if(newline.length() == 1)
byte0 = 2;
else
byte0 = 1;
if(s5 != null && outLinebyte[0] != 45 && ai1[0] > newline.length() * byte0)
fileoutputstream.write(outLinebyte, 0, ai1[0] - newline.length() * byte0);
if(sContentType != null && Linebyte[0] != 45 && ai[0] > newline.length() * byte0)
fileoutputstream.write(Linebyte, 0, ai[0] - newline.length() * byte0);
fileoutputstream.close();
}
}
//readLine函數把表單提交上來的數據按行讀取
private String readLine(byte Linebyte[], int ai[],ServletInputStream servletinputstream,String CharacterEncoding){
try{ //讀取一行
ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length);
if(ai[0] == -1)
return null;
}catch(IOException ex){
return null;
}
try{
if(CharacterEncoding == null){
//用默認的編碼方式把給定的byte數組轉換為字符串
return new String(Linebyte, 0, ai[0]);
}else{
//用給定的編碼方式把給定的byte數組轉換為字符串
return new String(Linebyte, 0, ai[0], CharacterEncoding);
}
}catch(Exception ex){
return null;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -