1.SmartUpload 上传代码
//利用IP TIME 随机数组成的实现类(smartupload)
package com.cn;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class IpTimeStamp {
private String ip = null;
private SimpleDateFormat sdf = null;
public IpTimeStamp(){}
public IpTimeStamp(String ip)
{
this.ip = ip;
}
public String getIPTimeRand()
{
StringBuffer sb = new StringBuffer();
if(this.ip!= null)
{
String s[] = this.ip.split("\\.");
for(int i=0;i<s.length;i++)
{
sb.append(this.addZero(s[i], 3));
}
}
sb.append(this.getTimeStamp());
Random r = new Random();
for(int i=0;i<3;i++)
{
sb.append(r.nextInt(10));
}
return sb.toString();
}
public String getDate(){
this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return this.sdf.format(new Date());
}
public String getTimeStamp()
{
this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
return this.sdf.format(new Date());
}
private String addZero(String str,int len){
StringBuffer s = new StringBuffer();
s.append(str);
while(s.length()<len){
s.insert(0, "0");
}
return s.toString();
}
public static void main(String[] args) {
System.out.println(new IpTimeStamp("192.168.1.1").getIPTimeRand());
}
}
//单个上传JSP页面
<%
SmartUpload smart = new SmartUpload();
smart.initialize(pageContext);//初始化上传操作
smart.upload();//上传准备
String name = smart.getRequest().getParameter("uname");
IpTimeStamp its = new IpTimeStamp(request.getRemoteAddr());//取得IP地址
String ext = smart.getFiles().getFile(0).getFileExt();//取得扩展名
String fileName = its.getIPTimeRand()+ "." + ext;
smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload" + java.io.File.separator +fileName);
%>
<%=smart.getFiles().getFile(0).getFileName().matches("^\\w+.(JPG|gif)$") %> //利用正规表达式来控制上传文件的格式
<h1>姓名:<%=name %></h1>
<img src="<%=request.getContextPath() %>/upload/<%=fileName %>">
//多个页面上传JSP页面
<%
SmartUpload smart = new SmartUpload();
smart.initialize(pageContext);//初始化上传操作
smart.upload();//上传准备
String name = smart.getRequest().getParameter("uname");
IpTimeStamp its = new IpTimeStamp(request.getRemoteAddr());//取得IP地址
for(int i=0;i<smart.getFiles().getCount();i++)
{
String ext = smart.getFiles().getFile(i).getFileExt();//取得扩展名
String fileName = its.getIPTimeRand()+ "." + ext;
smart.getFiles().getFile(i).saveAs(this.getServletContext().getRealPath("/")+"upload" + java.io.File.separator +fileName);
}
%>
2.FileUpload 上传代码
(1)上传工具类
package com.cn;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import com.cn.*;
public class FileUploadTools {
private HttpServletRequest request = null;
private List<FileItem> items = null;
private Map<String,List<String>> params = new HashMap<String, List<String>>();
private Map<String,FileItem> files = new HashMap<String, FileItem>();
public FileUploadTools(HttpServletRequest request,int maxSize,String tempDir) throws Exception
{
this.request = request;
DiskFileItemFactory factory = new DiskFileItemFactory();
if(tempDir !=null){
factory.setRepository(new File(tempDir));
}
ServletFileUpload upload = new ServletFileUpload(factory);
if(maxSize >0){
upload.setFileSizeMax(maxSize);
}
this.items = upload.parseRequest(request);
this.init();
}
private void init(){
Iterator<FileItem> iter = this.items.iterator();
IpTimeStamp its = new IpTimeStamp(this.request.getRemoteAddr());
while(iter.hasNext())
{
FileItem item = iter.next();
if(item.isFormField()){ //是普通参数
String name = item.getFieldName();
String value = item.getString();
List<String> temp = null;
if(this.params.containsKey(name))
{
temp = this.params.get(name);
}else{
temp = new ArrayList<String>();
}
temp.add(value);
this.params.put(name, temp);
}else{
String fileName = its.getIPTimeRand() + "." + item.getName().split("\\.");
this.files.put(fileName, item);
}
}
}
public String getParameter(String name){ //根据参数名称取出
String ret = null;
List<String> temp = this.params.get(name);
if(temp != null){
ret = temp.get(0);
}
return ret;
}
public String[] getParameterValues(String name){
String ret[] = null;
List<String> temp = this.params.get(name);
if(temp != null){
ret = temp.toArray(new String[]{});
}
return ret;
}
public Map<String ,FileItem> getUploadFile(){
return this.files;
}
//保存之后一定要有名字
public List<String> saveAll(String saveDir) throws IOException{
List<String> names = new ArrayList<String>();
if(this.files.size()>0){ //有内容
Set<String> keys = this.files.keySet(); //key是文件
Iterator<String> iter = keys.iterator();
File saveFile = null;
InputStream input =null;
OutputStream out = null;
while(iter.hasNext()){
FileItem item = this.files.get(iter.next());
String fileName = new IpTimeStamp(request.getRemoteAddr()).getIPTimeRand()+"."+item.getName().split("\\.")[1];
saveFile = new File(saveDir + fileName);
names.add(fileName);
try{
input = item.getInputStream();
out = new FileOutputStream(saveFile);
int temp = 0;
byte data[] = new byte[512];
while((temp = input.read(data,0,512))!=-1){
out.write(data);
}
}catch(IOException e){
throw e;
}finally{
try{
input.close();
out.close();
}catch(IOException e1){
throw e1;
}
}
}
}
return names;
}
}
//JSP单表接收页面
<%
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(this.getServletContext().getRealPath("/")+"upload"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(3 * 1024 * 1024);// 只能上传3M
List<FileItem> items = upload.parseRequest(request); //接收全部内容
Iterator<FileItem> iter = items.iterator();
IpTimeStamp its = new IpTimeStamp(request.getRemoteAddr());
while(iter.hasNext())
{
FileItem item = iter.next();
String fieldName = item.getFieldName(); //取得表单控件的名称
%>
<ul><h4><%=fieldName %> ----><%=item.isFormField() %></h4>
<%
if(!item.isFormField()) //如果不是普通文件
{
File saveFile = null;
InputStream input = null;
OutputStream output = null;
input = item.getInputStream();
output = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+"upload"
+File.separator+its.getIPTimeRand()+"."+item.getName().split("\\.")[1]));
int temp = 0;
byte data[] = new byte[512];
while((temp=input.read(data,0,512))!=-1)
{
output.write(data); //分块保存
}
input.close();
output.close();
}else{
String value= item.getString();
%>
<li> 普通参数:<%=value %>
<%
}
%>
</ul>
<%
}
%>
//JSP多表单接收页面
<%
FileUploadTools fut = new FileUploadTools(request, 3*1024*1024,this.getServletContext().getRealPath("/")+"upload");
String name = fut.getParameter("uname");
String inst[] = fut.getParameterValues("inst");
List<String> all = fut.saveAll(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator);
%>
<h3>姓名:<%=name %></h3>
<h3>兴趣:<%
for(int x= 0;x<inst.length;x++){
%>
<%=inst[x] %>
<% }
%></h3>
<%
Iterator<String> iter = all.iterator();
while(iter.hasNext()){
%>
<img src="<%=request.getContextPath()%>/upload/<%=iter.next() %>">
<%}
%>