A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java如何实现用iO流将文件从客户端拷贝到服务器端,是嵌套在web项目下的。求大侠,把源码贴出来

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

3 个回复

倒序浏览
客户端拷贝到服务器端,上传?
回复 使用道具 举报
  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import org.apache.commons.fileupload.*;
  5. import java.util.*;

  6. public class UploadServlet extends HttpServlet
  7. {
  8.         public void doPost(HttpServletRequest request,
  9.                 HttpServletResponse response) throws ServletException,IOException
  10.         {               
  11.                 response.setContentType("text/html;charset=gb2312");
  12.                 PrintWriter out = response.getWriter();
  13.                                                       
  14.                 //设置保存上传文件的目录
  15.                 String uploadDir = getServletContext().getRealPath("/upload");
  16.                 if (uploadDir == null)
  17.                 {
  18.                         out.println("无法访问存储目录!");
  19.                         return;
  20.                 }
  21.                 File fUploadDir = new File(uploadDir);
  22.                 if(!fUploadDir.exists())
  23.                 {
  24.                         if(!fUploadDir.mkdir())
  25.                         {
  26.                                 out.println("无法创建存储目录!");
  27.                                 return;
  28.                         }
  29.                 }
  30.    
  31.                 if (!DiskFileUpload.isMultipartContent(request))
  32.                 {
  33.                         out.println("只能处理multipart/form-data类型的数据!");
  34.                         return ;
  35.                 }
  36.                    
  37.                 DiskFileUpload fu = new DiskFileUpload();
  38.                 //最多上传200M数据
  39.                 fu.setSizeMax(1024 * 1024 * 200);
  40.                 //超过1M的字段数据采用临时文件缓存
  41.                 fu.setSizeThreshold(1024 * 1024);
  42.                 //采用默认的临时文件存储位置
  43.                 //fu.setRepositoryPath(...);
  44.                 //设置上传的普通字段的名称和文件字段的文件名所采用的字符集编码
  45.                 fu.setHeaderEncoding("gb2312");
  46.                
  47.                 //得到所有表单字段对象的集合
  48.                 List fileItems = null;
  49.                 try
  50.                 {
  51.                         fileItems = fu.parseRequest(request);
  52.                 }
  53.                 catch (FileUploadException e)
  54.                 {
  55.                         out.println("解析数据时出现如下问题:");
  56.                         e.printStackTrace(out);
  57.                         return;
  58.                 }
  59.                
  60.                 //处理每个表单字段
  61.                 Iterator i = fileItems.iterator();
  62.                 while (i.hasNext())
  63.                 {
  64.                         FileItem fi = (FileItem) i.next();
  65.                         if (fi.isFormField())
  66.                         {
  67.                                 String content = fi.getString("GB2312");
  68.                                 String fieldName = fi.getFieldName();
  69.                                 request.setAttribute(fieldName,content);                                   
  70.                         }
  71.                         else
  72.                         {
  73.                                 try
  74.                                 {
  75.                                         String pathSrc = fi.getName();
  76.                                         /*如果用户没有在FORM表单的文件字段中选择任何文件,
  77.                                         那么忽略对该字段项的处理*/
  78.                                         if(pathSrc.trim().equals(""))
  79.                                         {
  80.                                                 continue;
  81.                                         }
  82.                                         int start = pathSrc.lastIndexOf('\\');
  83.                                         String fileName = pathSrc.substring(start + 1);
  84.                                         File pathDest = new File(uploadDir, fileName);           

  85.                                         fi.write(pathDest);
  86.                                         String fieldName = fi.getFieldName();
  87.                                         request.setAttribute(fieldName, fileName);
  88.                                 }
  89.                                 catch (Exception e)
  90.                                 {
  91.                                     out.println("存储文件时出现如下问题:");
  92.                                     e.printStackTrace(out);
  93.                                     return;
  94.                                 }
  95.                                 finally  //总是立即删除保存表单字段内容的临时文件
  96.                                 {
  97.                                         fi.delete();
  98.                                 }
  99.                         }
  100.                 }
  101.                
  102.                 //显示处理结果
  103.                 out.println("用户:" + request.getAttribute("author") + "<br>");
  104.                 out.println("来自:" + request.getAttribute("company") + "<br>");
  105.                
  106.                 /*将上传的文件名组合成“file1,file2”这种形式显示出来,如果没有上传
  107.                  *任何文件,则显示“无”,如果只上传了第二个文件,显示为“file2”。*/
  108.                 StringBuffer filelist = new StringBuffer();
  109.                 String file1 = (String)request.getAttribute("file1");
  110.                 makeUpList(filelist,file1);
  111.                 String file2 = (String)request.getAttribute("file2");
  112.                 makeUpList(filelist,file2);
  113.                 out.println("成功上传的文件:" +
  114.                         (filelist.length()==0 ? "无" : filelist.toString()));
  115.         }
  116.        
  117.         /**
  118.          *将一段字符串追加到一个结果字符串中。如果结果字符串的初始内容不为空,
  119.          *在追加当前这段字符串之前先最加一个逗号(,)。在组合sql语句的查询条件时,
  120.          *经常要用到类似的方法,第一条件前没有"and",而后面的条件前都需要用"and"
  121.          *作连词,如果没有选择第一个条件,第二个条件就变成第一个,依此类推。
  122.          *
  123.          *@param result 要将当前字符串追加进去的结果字符串
  124.          *@param fragment 当前要追加的字符串
  125.          */
  126.         private void makeUpList(StringBuffer result,String fragment)
  127.         {
  128.                 if(fragment != null)
  129.                 {
  130.                         if(result.length() != 0)
  131.                         {
  132.                                 result.append(",");
  133.                         }
  134.                         result.append(fragment);
  135.                 }               
  136.         }
  137. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马