1. 你在html页面中写下面的语句就可以把文件数据传到servlet中。
<%@page contenttype="text/html;charset=gb2312"%>
2. 在sevelt的代码这样写的,它调用fileload这个类来做文件上传。
package fileload.com.lh;
/**
* 此处插入类型描述。
* 创建日期:(2002-11-12 16:10:26)
* @author:无是无非
*/
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;
import java.io.*;
import javax.servlet.servletinputstream;
public class flservlet extends javax.servlet.http.httpservlet {
/**
* flservlet 构造子注解。
*/
public flservlet() {
super();
}
protected void doget(
javax.servlet.http.httpservletrequest request,
javax.servlet.http.httpservletresponse response)
throws javax.servlet.servletexception, java.io.ioexception {
dopost(request, response);
}
protected void dopost(httpservletrequest request, httpservletresponse response)
throws javax.servlet.servletexception, java.io.ioexception {
//上传文件
fileload fl = new fileload();
fl.prepareforfile(request);
}
}
3. fileload类的代码如下。
package fileload.com.lh;
/**
* 此处插入类型描述。
* 创建日期:(2002-11-12 16:14:10)
* @author:无是无非
*/
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;
import java.io.*;
import javax.servlet.servletinputstream;
public class fileload {
public servletinputstream sis = null;
public byte[] b = new byte[4096]; //字节流存放数组
public string sourcefile = ""; //源文件名
private int count = 0; //已传输文件数目
public double size = double.max_value; //限制大小
public string suffix = ""; //文件后缀名
public string objectfilename = ""; //目标文件名
public string objectpath = "e://"; //目标文件目录
public boolean successful = true;
/**
* fileload 构造子注解。
*/
public fileload() {
super();
}
/**
* 此处插入方法描述。
* 创建日期:(2002-11-14 9:32:16)
* @param response javax.servlet.http.httpservletresponse
*/
public void prepareforfile(httpservletrequest request) {
try {
sis = request.getinputstream();
int a = 0;
int k = 0;
string s = "";
while ((a = sis.readline(b, 0, b.length)) != -1)
//判断是否从文件中读到内容
{
s = new string(b, 0, a);
if ((k = s.indexof("filename=")) != -1)
//传过来的每个文件中都有"filename="这段文字
{
s = s.substring(k + 10);
k = s.indexof("/"");
s = s.substring(0, k); //得到了文件全部名称
sourcefile = s;
k = s.lastindexof(".");
suffix = s.substring(k + 1); //得到了文件的扩展名
transferfile();
}
}
} catch (exception ex) {
ex.printstacktrace();
}
}
/**
* 此处插入方法描述。
* 创建日期:(2002-11-14 9:16:19)
* @param i int
*/
public void transferfile() {
string x = long.tostring(new java.util.date().gettime());
try {
objectfilename = x + "." + suffix;
fileoutputstream out = new fileoutputstream(objectpath + objectfilename);
int a = 0;
int k = 0;
long hastransfered = 0; //标示已经传输的字节数
string s = "";
while ((a = sis.readline(b, 0, b.length)) != -1) {
s = new string(b, 0, a);
if ((k = s.indexof("content-type:")) != -1)
break;
}
sis.readline(b, 0, b.length);
while ((a = sis.readline(b, 0, b.length)) != -1) {
s = new string(b, 0, a);
if ((b[0] == 45)
&& (b[1] == 45)
&& (b[2] == 45)
&& (b[3] == 45)
&& (b[4] == 45))
break;
out.write(b, 0, a);
hastransfered += a;
if (hastransfered >= 1000) {
system.out.println("文件超大了!!");
successful = false;
break;
}
++count;
}
if (!successful) {
//如果传送文件没有成功就删除掉这个文件
out.close();
sis.close();
string tem = objectpath + objectfilename;
file del = new file(tem);
del.delete();
}
out.close();
} catch (ioexception ioe) {
system.out.println("ioexception!!");
}
}
}
闽公网安备 35060202000074号