首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

求大神帮忙,关于文件上传有关问题

2013-04-20 
求大神帮忙,关于文件上传问题本帖最后由 u010295565 于 2013-04-14 18:44:47 编辑情况是这样的,通过浏览选

求大神帮忙,关于文件上传问题
本帖最后由 u010295565 于 2013-04-14 18:44:47 编辑 情况是这样的,通过浏览选择文件,上传一个TXT文件到服务器进行读取数据
问题是,在我本机项目中,上传无问题,但上传到服务器项目,new FileReader时就报“系统找不到指定文件”错误,我大概分析了下,可能是服务器在解析路径时存在问题,所以想请各位大神给出解决办法,拜谢。
各层大概代码如下:
JSP:
〈form action="MoqUploadSubmit.jsp" enctype="MULTIPART/FORM-DATA" method="post">

JAVA:
public ModelAndView importFile(HttpServletRequest request,
HttpServletResponse response) throws Exception {
    List fileList = this.getUploadFileList(request);
    UploadFileItem fileItem = (UploadFileItem) fileList.get(0);
    InputStream is = fileItem.getInputStream();
    //fileItem.getName()为获取文件路径,在上传到服务器时,是能获得路径的,路径为本地上传文件路径,我想是否是服务器环境在得到这个路径时找的却是服务器本身系统中该路径下的文件,所以才报错找不到指定文件,如是的话,有无办法解决啊?
    FileReader file = new FileReader(fileItem.getName());//该行报错(系统找不到指定文件)
}


/**
 * 获取上传文件列表
 * @param request HttpServletRequest
 * @return List 上传文件列表,封装UploadFileItem
 */
protected List getUploadFileList(HttpServletRequest request) throws CSSBaseBizCheckedException {
    List uploadFileList = null; // 上传文件列表
     try {
         DiskFileItemFactory dfiFactory = new DiskFileItemFactory();
         dfiFactory.setSizeThreshold(FileConstants.FILE_MAX_SIZE);
         ServletFileUpload fu = new ServletFileUpload(dfiFactory);
         fu.setHeaderEncoding(FileConstants.CHARACTER_ENCODING_UTF8);
         List fileList = fu.parseRequest(request);
         int len = fileList.size();

         if (fileList != null && len > 0) {
              uploadFileList = new ArrayList();
              for (int i = 0; i < len; i++) {
                  FileItem fitem = (FileItem) fileList.get(i);
                  long fitemSize = fitem.getSize();
                  //如果导入文件大于2.5M则返回
                      if(fitemSize > 2621440){
                       uploadFileList.add(new Long(fitemSize));
                       return uploadFileList;
                  }
                  if (fitem != null) {


                       UploadFileItem ufi = new UploadFileItem(fitem);
                          if (StringUtils.trimNull(ufi.getName()).length() > 0) {
                              uploadFileList.add(ufi);
                          } else {
                              setRequestAttribute(request, fitem);
                          }
                  }
               }
         }
         setRequestAttribute(request);
     } catch (Exception fuex) {
         logger.error("获取上传文件列表失败!", fuex);
         throw new CSSBaseBizCheckedException(10010002, fuex);
     }
     return uploadFileList;
}
[解决办法]
  FileReader file = new FileReader(fileItem.getName());

菜鸟有话说: 这个问题我有遇到过,服务器端得到fileItem的对象,但是该fileItem中封装的是客户端对应要下载的文件在客户端的路径,也就是在服务器端没有该路径的文件

你要上传文件,应该在服务器端指定一个文件夹,将你要上传的文件上传到该文件夹下;因为fileItem中封装了文件流(fileItem.getInputStream()),那么,你只要在服务器端中的servlet中把这个流拿到后,把这个流直接写入服务器端刚才说的用于存放上传文件的文件夹中就行了;

另外,fileItem.getName()中,获得了客户端文件的完整路径,你可以截取一下,把文件名截取下来,在服务器端保留这个上传的文件的文件名;
 
[解决办法]
BufferedReader br = new BufferedReader(new InputStreamReader( fileItem.getInputStream()));

热点排行