Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1531032
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 20:10:35

一起学习



package com.upload; 



import java.io.*; 

import javax.servlet.http.HttpServletRequest; 

import javax.servlet.ServletInputStream; 

import javax.servlet.ServletException; 



public class upload{ 

private static String newline = "

"; 

private String uploadDirectory = "."; 

private String ContentType = ""; 

private String CharacterEncoding = ""; 



private String getFileName(String s){ 

int i = s.lastIndexOf(""); 

if(i < 0 // i >= s.length() - 1){ 

i = s.lastIndexOf("/"); 

if(i < 0 // i >= s.length() - 1) 

return s; 

} 

return s.substring(i   1); 

} 



public void setUploadDirectory(String s){ 

uploadDirectory = s; 

} 



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(String parent, String child) 

//Creates a new File instance from a parent pathname string 

//and a child pathname string. 

File file = new File(uploadDirectory, filename); 



//FileOutputStream(File file) 

//Creates a file output stream to write to the file represented 

//by the specified File object. 

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){ 

//write(byte[] b, int off, int len) 

//Writes len bytes from the specified byte array starting 

//at offset off to this file output stream. 

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(); 

} 

} 



private String readLine(byte Linebyte[], int ai[], 

ServletInputStream servletinputstream, 

String CharacterEncoding){ 

try{ 

//readLine(byte[] buffer, int offset, int length) 

//Reads a line from the POST data. 

ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length); 

if(ai[0] == -1) 

return null; 

}catch(IOException _ex){ 

return null; 

} 

try{ 

if(CharacterEncoding == null){ 

//用缺省的编码方式把给定的byte数组转换为字符串 

//String(byte[] bytes, int offset, int length) 

return new String(Linebyte, 0, ai[0]); 

}else{ 

//用给定的编码方式把给定的byte数组转换为字符串 

//String(byte[] bytes, int offset, int length, String enc) 

return new String(Linebyte, 0, ai[0], CharacterEncoding); 

} 

}catch(Exception _ex){ 

return null; 

} 

} 

/* 

public int readLine(byte[] buffer, 

int offset, 

int length) throws java.io.IOException 

从POST来的数据中读一行 

参数: 

buffer - buffer to hold the line data 

offset - offset into the buffer to start 

length - maximum number of bytes to read. 

Returns: 

number of bytes read or -1 on the end of line. 

*/ 

} 



下载本文示例代码


一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean一个文件上传JavaBean
阅读(296) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~