fileupload.java
来自「java 文件 上传类 里面有5个文件 一班 都可以应付 直接用里面的方法就可以」· Java 代码 · 共 216 行
JAVA
216 行
package FileUploadPkg;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletInputStream;
import java.util.Dictionary;
import java.util.Hashtable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileUpload {
private String savePath, filePath, contentType;
private Dictionary fields;
private String fileName,fileSuffix;
private int lineLen = 256;
/*
public static void main(String[] args)
{
FileUploadBean up = new FileUploadBean();
System.out.println("11");
System.out.println(up.getFileName());
}
*/
public String getFileName() {
return fileName;
}
public String getFileSuffix() {
return fileSuffix;
}
public String getFilePath() {
return filePath;
}
public void setSavePath(String path) {
//System.out.println("path:"+path);
savePath = path;
//System.out.println("savePath:"+savePath);
}
public String getContentType() {
return contentType;
}
public String getFieldValue(String fieldName) {
if (fields == null || fieldName == null)
return null;
return (String) fields.get(fieldName);
}
private void setFileName(String s) {
if (s==null)
return;
//System.out.println("setFileName s:"+s);
int pos = s.indexOf("; filename=\"");
if (pos != -1) {
filePath = s.substring(pos+12,s.length()-1);
// Windows浏览器发送完整的文件路径和名字
// 但Linux/Unix和Mac浏览器只发送文件名字
pos = filePath.lastIndexOf("\\");
if (pos != -1)
fileName = filePath.substring(pos + 1);
else
fileName = filePath;
pos = fileName.lastIndexOf(".");
if(pos != -1)
fileSuffix = fileName.substring(pos);
else
fileSuffix = ".tmp";
}
//System.out.println("setFileName filePath:"+filePath);
//System.out.println("setFileName fileName:"+fileName);
}
private void setContentType(String s) {
if (s==null)
return;
int pos = s.indexOf(": ");
if (pos != -1)
contentType = s.substring(pos+2);
}
public void doUpload(HttpServletRequest request) throws IOException {
ServletInputStream in = request.getInputStream();
/* int readBytes = 0;
int totalRead = 0;
//字节数
byte m_binArray[];
int m_totalBytes;
m_totalBytes = request.getContentLength();
m_binArray = new byte[m_totalBytes];
for(; totalRead < m_totalBytes; totalRead += readBytes)
try
{
readBytes = in.read(m_binArray, totalRead, m_totalBytes - totalRead);
}
catch(Exception e)
{
System.out.println("Unable to upload.");
}
FileOutputStream fp = new FileOutputStream("d:\\form.txt");
fp.write(m_binArray,0,m_totalBytes);
fp.close();
*/
/*
FileOutputStream fp = new FileOutputStream("d:\\form.txt");
byte[] line = new byte[lineLen];
int i = in.readLine(line, 0, lineLen);
while(i != -1)
{
String str = new String(line,0,i);
System.out.print(str);
fp.write(line,0,i);
i = in.readLine(line, 0, lineLen);
}
fp.close();
*/
//String str;
byte[] line = new byte[lineLen];
int i = in.readLine(line, 0, lineLen);
int i1 = 0;
if (i < 3)
return;
int boundaryLength = i - 2;
String boundary = new String(line, 0, boundaryLength); //-2丢弃换行字符
fields = new Hashtable();
while (i != -1) {
//str = new String(line,0,i);
//System.out.println(new String(line,0,i));
String newLine = new String(line, 0, i);
if (newLine.startsWith("Content-Disposition: form-data; name=\"")) {
if (newLine.indexOf("; filename=\"") != -1) {
setFileName(new String(line, 0, i-2));
if (fileName==null)
return;
i = in.readLine(line, 0, lineLen);//文件类型
setContentType(new String(line, 0, i-2));
i = in.readLine(line, 0, lineLen);//空行
//begin to read file content
i = in.readLine(line, 0, lineLen);
File f = new File((savePath==null? "noName" : savePath)+fileSuffix);
FileOutputStream fp = new FileOutputStream(f);
byte [] line1 = new byte[lineLen];
i1 = i;
while (i1 != -1 && i != -1) {
i1 = in.readLine(line1, 0, lineLen);
if ((i1==boundaryLength+2 || i1==boundaryLength+4) && (new String(line1, 0, i1).startsWith(boundary)))
{
fp.write(line,0,i-2);
break;
}
else
{
fp.write(line,0,i);
}
i = in.readLine(line, 0, lineLen);
if ((i==boundaryLength+2 || i==boundaryLength+4) && (new String(line, 0, i).startsWith(boundary)))
{
fp.write(line1,0,i1-2);
break;
}
else
{
fp.write(line1,0,i1);
}
}
fp.close();
}
else {
// 普通表单输入元素
// 获取输入元素名字
int pos = newLine.indexOf("name=\"");
String fieldName = newLine.substring(pos+6, newLine.length()-3);
i = in.readLine(line, 0, lineLen);
i = in.readLine(line, 0, lineLen);
newLine = new String(line, 0, i);
StringBuffer fieldValue = new StringBuffer(lineLen);
while (i != -1 && !newLine.startsWith(boundary)) {
// 最后一行包含换行字符
// 因此我们必须检查当前行是否是最后一行
i = in.readLine(line, 0, lineLen);
System.out.println("check line:"+new String(line,0,i));
if ((i==boundaryLength+2 || i==boundaryLength+4) && (new String(line, 0, i).startsWith(boundary)))
fieldValue.append(newLine.substring(0, newLine.length()-2));
else
fieldValue.append(newLine);
newLine = new String(line, 0, i);
}
fields.put(fieldName, fieldValue.toString());
}
}
i = in.readLine(line, 0, lineLen);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?