Java上传图片到服务器

Java上传图片到服务器 对于图片处理有两种: 一种是插入数据库;一种是上传到服务器上。 本次讨论后一种 情况。 关于图片的访问,不要通过app服务器访问,即图片不要放在app服务器上,这样下去图片占的内存会越来越大,迟早会把app服务器搞死,针对的是java的开源的tomcat服务器 图片的访问应该通过apache及其他的一些web server来访问。

<html>
<head>
<title>Jsp+Servlet upload file</title>
</head>
<body>
<form name= "upform" action= "UploadServlet" method= "POST" enctype= "multipart/form-data" >
<input type = "file" name= "file1" id= "file1" /><br/>
<input type = "file" name= "file2" if = "file2" /><br/>
<input type = "file" name= "file3" id= "file3" /><br/>
<input type= "submit" value= "Submit" /><br/>
<input type= "reset" />
</form>
</body>
</html>
 
 
 
 
servlet文件
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.fileupload.DefaultFileItemFactory;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
 
/**
* Servlet implementation class for Servlet: UploadServlet
*
*/
public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
File tmpDir = null ; //初始化上传文件的临时存放目录
File saveDir = null ; //初始化上传文件后的保存目录
public UploadServlet() {
super ();
}
 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this .doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String pp= null ;
String upto= null ;
if (ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory dff = new DiskFileItemFactory(); //创建该对象
dff.setRepository(tmpDir); //指定上传文件的临时目录
dff.setSizeThreshold( 10240000 ); //指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff); //创建该对象
sfu.setFileSizeMax( 50000000 ); //指定单个上传文件的最大尺寸
sfu.setSizeMax( 10000000 ); //指定一次上传多个文件的总尺寸
FileItemIterator fii = sfu.getItemIterator(request); //解析request 请求,并返回FileItemIterator集合
while (fii.hasNext()){
FileItemStream fis = fii.next(); //从集合中获得一个文件流
if (!fis.isFormField() && fis.getName().length()> 0 ){ //过滤掉表单中非文件域
String fileName = fis.getName().substring(fis.getName().lastIndexOf("\")); //获得上传文件的文件名
System.out.println( "request.getRealPath()==" +request.getRealPath( "/" ));
String uploadPath = request.getRealPath( "/" )+"dataimages\"; //选定上传的目录此处为当前目录
 
if (! new File(uploadPath).isDirectory()) //选定上传的目录此处为当前目录,没有则创建
     new File(uploadPath).mkdirs();
System.out.println( "uploadPath=" +uploadPath);
fileName=fileName.substring(fileName.lastIndexOf( "." )); //获取从.开始到最后的字符
//将时间转化为字符串用于给文件或者文件夹改名,防止传上来的图片名称相同
Date time= new Date();
String dirTime=String.valueOf(time.getTime());
//
BufferedInputStream in = new BufferedInputStream(fis.openStream()); //获得文件输入流
 
//BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"\"+dirTime+fileName)));//获得文件输出流
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream( new File(uploadPath+"\"+dirTime+fileName))); //获得文件输出流
//pp为已经上传的文件
pp=uploadPath+dirTime+fileName;
System.out.println( "pp=" +pp);
//upto为上传的路径
upto=uploadPath;
 
Streams.copy(in, out, true ); //开始把文件写到你指定的上传文件夹
}
 
}
/*//定义解压字符串,用于解压上传的rar文件,注意此处需要一个winrar.exe文件
String jieya=request.getRealPath("/")+ "WinRAR.exe x -t -o+ -p- ""+pp+"" ""+upto+""";
//String jieya="D:\Tomcat 5.5\webapps\fileupload\WinRAR.exe x -t -o+ -p- ""+pp+"" ""+upto+""";
 
Process p=Runtime.getRuntime().exec(jieya);//将传输的rar文件解压*/
response.getWriter().println( "File upload successfully!!!" ); //终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
}
} catch (Exception e){
e.printStackTrace();
}
}
 
public void init() throws ServletException { //初始化,没什么意义
super .init();
String tmpPath = "c:\tmpdir" ;
String savePath = "c:\updir" ;
tmpDir = new File(tmpPath);
saveDir = new File(savePath);
if (!tmpDir.isDirectory())
tmpDir.mkdir();
if (!saveDir.isDirectory())
saveDir.mkdir();
 
}
 
          
}
 
web.xml文件
 
<servlet>
 
 
<servlet-name>UploadServlet</servlet-name>
<servlet- class >dd.UploadServlet</servlet- class >
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值