package com.iss.util;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Upload {
public Upload() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private String saveDir = "/temp"; //要保存文件的路径
private String contentType = "jpg"; //文档类型
private String charset = "ISO-8859-1"; //字符集
private ArrayList tmpFileName = new ArrayList(); //临时存放文件名的数据结构
private Hashtable parameter = new Hashtable(); //存放参数名和值的数据结构
private ServletContext context; //程序上下文,用于初始化
private HttpServletRequest request; //用于传入请求对象的实例
private String boundary = ""; //内存数据的分隔符
private int len = 0; //每次从内在中实际读到的字节长度
private String queryString;
private int count; //上载的文件总数
private String[] fileName; //上载的文件名数组
private String file_name;
private long fileSize;
private long maxFileSize = 1024 * 1024 * 10; //最大文件上载字节;
private String tagFileName = "kk";
public final void init(HttpServletRequest request) throws ServletException {
this.request = request;
boundary = request.getContentType().substring(30); //得到内存中数据分界符
queryString = request.getQueryString();
}
public String getParameter(String s) { //用于得到指定字段的参数值,重写request.getParameter(String s)
if (parameter.isEmpty()) {
return null;
}
return (String) parameter.get(s);
}
public String[] getParameterValues(String s) { //用于得到指定同名字段的参数数组,重写request.getParameterValues(String s)
ArrayList al = new ArrayList();
if (parameter.isEmpty()) {
return null;
}
Enumeration e = parameter.keys();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
if ( -1 != key.indexOf(s + "||||||||||") || key.equals(s)) {
al.add(parameter.get(key));
}
}
if (al.size() == 0) {
return null;
}
String[] value = new String[al.size()];
for (int i = 0; i < value.length; i++) {
value[i] = (String) al.get(i);
}
return value;
}
public String getQueryString() {
return queryString;
}
public int getCount() {
return count;
}
public String[] getFileName() {
return fileName;
}
//获得上传文件的字节数
public long getFileSize() {
return fileSize;
}
//获得上传的原始文件名
public String getFile_name() {
return file_name;
}
//限制文件最大字节数
public void setMaxFileSize(long size) {
maxFileSize = size;
}
public void setTagFileName(String filename) {
tagFileName = filename;
}
public void setSaveDir(String saveDir) { //设置上载文件要保存的路径
this.saveDir = saveDir;
File testdir = new File(saveDir); //为了保证目录存在,如果没有则新建该目录
if (!testdir.exists()) {
testdir.mkdirs();
}
}
public void setCharset(String charset) { //设置字符集
this.charset = charset;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
//设置文件名
public void setFile_name(String file_name) {
this.file_name = file_name;
}
//上传文件
public boolean uploadFile() throws ServletException, IOException { //用户调用的上载方法
System.out.println("mmmmmmmmmmmmmm");
setCharset(request.getCharacterEncoding());
System.out.println("llllllllllllllllllllll");
return uploadFile(request.getInputStream());
}
private boolean uploadFile(ServletInputStream servletinputstream) throws //取得央存数据的主方法
ServletException, IOException {
System.out.println("kkkkkkkkkkkkk");
String line = null;
byte[] buffer = new byte[256];
while ((line = readLine(buffer, servletinputstream, charset)) != null) {
if (line.startsWith("Content-Disposition: form-data; ")) {
int i = line.indexOf("filename=");
if (i >= 0) { //如果一段分界符内的描述中有filename=,说明是文件的编码内容
String fName = getFileName(line);//////////////////////////
if (fName.equals("")) {
continue;
}
tmpFileName.add(fName);
count++;
while ((line = readLine(buffer, servletinputstream, charset)) != null) {
if (line.length() <= 2) {
break;
}
}
File f = new File(saveDir, fName);
FileOutputStream dos = new FileOutputStream(f);
long size = 0l;
while ((line = readLine(buffer, servletinputstream, null)) != null) {
if (line.indexOf(boundary) != -1) {
break;
}
size += len;
if (size > maxFileSize) {
throw new IOException("文件超过" + maxFileSize + "字节!");
}
dos.write(buffer, 0, len);
}
dos.close();
} else { //否则是字段编码的内容
String key = getKey(line);
String value = "";
while ((line = readLine(buffer, servletinputstream, charset)) != null) {
if (line.length() <= 2) {
break;
}
} while ((line = readLine(buffer, servletinputstream,
charset)) != null) {
if (line.indexOf(boundary) != -1) {
break;
}
value += line;
}
put(key, value.trim(), parameter);
}
}
}
if (queryString != null) {
String[] each = split(queryString, "&");
for (int k = 0; k < each.length; k++) {
String[] nv = split(each[k], "=");
if (nv.length == 2) {
put(nv[0], nv[1], parameter);
}
}
}
fileName = new String[tmpFileName.size()];
for (int k = 0; k < fileName.length; k++) {
fileName[k] = (String) tmpFileName.get(k); //把ArrayList中临时文件名倒入数据中供用户调用
}
if (fileName.length == 0) {
return false; //如果fileName数据为空说明没有上载任何文件
}
return true;
}
private void put(String key, String value, Hashtable ht) {
if (!ht.containsKey(key)) {
ht.put(key, value);
} else { //如果已经有了同名的KEY,就要把当前的key更名,同时要注意不能构成和KEY同名
try {
Thread.currentThread().sleep(1); //为了不在同一ms中产生两个相同的key
} catch (Exception e) {}
key += "||||||||||" + System.currentTimeMillis();
ht.put(key, value);
}
}
/*
调用ServletInputstream.readLine(byte[] b,int offset,length)方法,该方法是从ServletInputstream流中读一行
到指定的byte数组,为了保证能够容纳一行,该byte[]b不应该小于256,重写的readLine中,调用了一个成员变量len为
实际读到的字节数(有的行不满256),则在文件内容写入时应该从byte数组中写入这个len长度的字节而不是整个byte[]
的长度,但重写的这个方法返回的是String以便分�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SSH框架下WEB开发 (936个子文件)
Upload.class 8KB
StringUtil.class 7KB
Users.class 6KB
UseripDAO.class 5KB
PhotoAddAction.class 5KB
AlbumAddAction.class 4KB
UserRegistAction.class 4KB
ImessageDaoImpl.class 4KB
CreateXml.class 4KB
TalkInterFaceC.class 4KB
TalkInterFaceC.class 4KB
PageInfo.class 4KB
InsertMovementCommentAction.class 4KB
IBaseDaoImpl.class 4KB
TalkInterFaceS.class 4KB
TalkInterFaceS.class 4KB
ImessageBizImpl.class 4KB
DateUtil.class 4KB
ImovementBizImpl.class 4KB
IloginportalBizImpl.class 4KB
SelectServlet.class 3KB
SelectAllMovementCommentAction.class 3KB
IphotocommentBizImpl.class 3KB
IfriendBizImpl.class 3KB
UserRegistForm.class 3KB
IfriendDaoImpl.class 3KB
DeleteMovementCommentAction.class 3KB
IloginportalDaoImpl.class 3KB
ListAction.class 3KB
PhotocommentAction.class 3KB
PhotocommentVisitAction.class 3KB
PhotoCommentDelAction.class 3KB
PhotoCommentPaginAction.class 3KB
PageBean.class 3KB
AlbumUpdateAction.class 3KB
ImovementcommentDaoImpl.class 3KB
GetAllMovementAction.class 3KB
Userspicture.class 3KB
FriendAddAction.class 3KB
GetUpdateMovement.class 3KB
UserLoginAction.class 3KB
UserQuery.class 3KB
IphotoBizImpl.class 3KB
ImovementcommentBizImpl.class 3KB
PageAction.class 3KB
IphotocommentDaoImpl.class 3KB
PhotoUpdateForm.class 3KB
AlbumDelAction.class 3KB
IphotoDaoImpl.class 3KB
IalbumBizImpl.class 3KB
IalbumDaoImpl.class 3KB
DigitalUtil.class 3KB
SelectAllMessageAction.class 3KB
IBaseDaoImpl$1.class 3KB
FriendPageAction.class 3KB
PhotoSelectForm.class 3KB
PhotoListForm.class 3KB
UpdatePersonOrDeletePersonAction.class 2KB
DelMovementAction.class 2KB
HibernateSessionFactory.class 2KB
TalkInterFaceS$TCPServer.class 2KB
TalkInterFaceS$TCPServer.class 2KB
FriendListAction.class 2KB
SetMessageAction.class 2KB
FriendinfoAction.class 2KB
SetMessageForm.class 2KB
TalkInterFaceC$TCPClient.class 2KB
TalkInterFaceC$TCPClient.class 2KB
ModifyAction.class 2KB
AlbumAddForm.class 2KB
GetPersonbyIDAction.class 2KB
UploadAction.class 2KB
MyAlbumListAction.class 2KB
UpdateMovementAction.class 2KB
ImovementDaoImpl.class 2KB
SelectInfoAction.class 2KB
Usersalbum.class 2KB
InsertMovementAction.class 2KB
PhotoCommentEditAction.class 2KB
Usersmessage.class 2KB
UpdatePersonOrDeletePersonForm.class 2KB
UpdateMovementCommentAction.class 2KB
ChatAction.class 2KB
Usersmovement.class 2KB
Movementcomment.class 2KB
Picturecomment.class 2KB
PhotoUpdateAction.class 2KB
AlbumListAction.class 2KB
PhotoAddForm.class 2KB
PhotocommentForm.class 2KB
PhotoListAction.class 2KB
Utility.class 2KB
ToSetMessageAction.class 2KB
GetPersonbyIDForm.class 2KB
MovementCommentForm.class 2KB
FriendDeleteAction.class 2KB
DeleteMessageAction.class 2KB
PhotoDelAction.class 2KB
DispartPage.class 2KB
LoginAction.class 2KB
共 936 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
寻梦魂
- 粉丝: 2
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功