package org.test.servlets;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
@SuppressWarnings({ "unchecked", "deprecation" }) //注释类型安全
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory factory=new DiskFileItemFactory();
//把upload作为临时储存目录
String path=request.getRealPath("/upload");
System.out.print(path);
factory.setRepository(new File(path));
//设置小于1M的文件放到内存中 大于等于1M的放在磁盘当中
factory.setSizeThreshold(1024*1024);
ServletFileUpload upload=new ServletFileUpload(factory);
try {
//parseRequest
List<FileItem> list=upload.parseRequest(request);
for(FileItem item:list)
{
//表示表单是一般类型不是file类型
if(item.isFormField())
{
//获得表单name
String name=item.getFieldName();
String value=item.getString("gbk");
request.setAttribute(name, value);
}
else//表示是文件类型
{
//获得文件name 不能获得
String name=item.getFieldName();
String value=item.getName();
//获得最后一个反斜杠
int start=value.lastIndexOf("\\");
//真正的文件名
String filename=value.substring(start+1);
request.setAttribute(name,filename);
//得到输出流
OutputStream os=new FileOutputStream(new File(path,filename));
//得到输入流
InputStream is=item.getInputStream();
byte[] buffer=new byte[400];//设置缓冲
int length=0;//每次读写长度
while((length=is.read(buffer))>0)//表示里面有内容
{
os.write(buffer,0,length);
}
os.close();
is.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
//请求转发
request.getRequestDispatcher("upload/request2.jsp").forward(request,response);
}
}
在request2.jsp里能显示文件名 但是在项目里的UPLOAD文件夹里始终没有那个我要上传的文件! 请高手指点
但是再D:\ProgramFiles\eclipse\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\struts2.0\upload这个目录下
这样在项目的upload文件夹里没有这个上传文件!
怎么才能再项目里的upload文件夹里显示上传的文件呢!
我用的是Eclipse开发工具
后来我把setRepository也去掉了 很苦恼啊 帮帮我啊!
path=request.getRealPath("/") + "\\upload\\";楼主可能是Eclipse和tomcat配置有问题,与其这样,还不如自己装个tomcat,把工程放在webapps下测试
String fileName = filebean.getFileName();
System.out.println("文件名是:"+fileName);
int size = filebean.getSize(); // 得到应用程序的上传路径
String fullPath = this.getServlet().getServletContext().getRealPath(
"upload");
System.out.println("fullpath="+fullPath);
File file = new File(fullPath);
if (!file.exists())
file.mkdir();// 如果文件夹不存在,则创建
try {
//得到文件输入流
InputStream is = filebean.getFile().getInputStream();
//封装为缓冲输入流
BufferedInputStream bis = new BufferedInputStream(is);
//创建文件输出流 // 输入的指定位置 文件名
FileOutputStream fos = new FileOutputStream(new File(fullPath, fileName));
//封装为缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(fos);
int block = 2048;//每次操作的最大字节数
int actual = 0; //每次操作的实际字节数
byte[] bs = new byte[block]; //字节缓冲
while((actual = bis.read(bs)) > 0){
bos.write(bs, 0, actual);
}
在form 里面有 private FormFile file; 这个属性,关联页面的 file
//关闭流
bos.close();
bis.close();
fos.close();
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}