我用jsp+javaBean实现文件上传,但某些文件例如.sql在上传时会出错。猜测时文件输入流有问题,求大虾帮忙

解决方案 »

  1.   

    源码:
    public String uploadFile(FormFile formFile, HttpServletRequest request,
    String fullDir) throws FileNotFoundException {
    FormFile file = formFile;
    String fulldir = fullDir;
    String url = "";
    String dir = request.getSession().getServletContext().getRealPath("/")
    + fulldir;
    String fileName = new String();
    if (file.getFileName() != null && !"".equals(file.getFileName())) {
    // 指定上传文件的位置
    File uploadFile = new File(dir);
    // 绝对路径
    String path = uploadFile.getAbsolutePath(); // 判断指定路径dir是否存在,不存在则创建路径
    if (!uploadFile.exists() || uploadFile == null) {
    uploadFile.mkdirs();
    }

    try {
    //ewr/werw/231231231.sql
    fileName = System.currentTimeMillis()
    + this.subFileType(file);
    url = path + "\\" + fileName;
    FileOutputStream fos = new FileOutputStream(url);
    if (file.getInputStream() instanceof ByteArrayInputStream) {
    ByteArrayInputStream fis = (ByteArrayInputStream) file
    .getInputStream();
    byte[] buffer = new byte[1024 * 2];
    int len = -1;
    while ((len = fis.read(buffer)) != -1) {
    fos.write(buffer, 0, len);
    }
    fis.close();
    } else {
    FileInputStream fis = (FileInputStream) file
    .getInputStream();
    byte[] buffer = new byte[1024 * 2];
    int len = -1;
    while ((len = fis.read(buffer)) != -1) {
    fos.write(buffer, 0, len);
    }
    fis.close();
    }
    fos.flush();
    fos.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    return new String(fullDir+"\\"+fileName);
    }
    会报格式匹配错误
      

  2.   

    哪一行报的错知道吗?你把报错的log贴出来看看,你这样说是看不出来的。
      

  3.   

    server 10:37:45
      严重: Servlet.service() for servlet action threw exception
    java.lang.ClassCastException: java.io.ByteArrayInputStream
    at com.mrk.projectmanager.web.action.DataAction.add(DataAction.java:91)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    at com.mrk.projectmanager.web.action.BaseAction.execute(BaseAction.java:30)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.mrk.projectmanager.filters.PagerLocalThreadFilter.doFilter(PagerLocalThreadFilter.java:31)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
      

  4.   

    ByteArrayInputStream改成BufferedInputStream试试
    或者你直接用apache的fileupload组件
    我提问的一个帖子有后台
    http://topic.csdn.net/u/20091111/17/8fa87372-b003-4ebb-90fe-db3b20c08311.html
    代码需要完善。
      

  5.   

    ByteArrayInputStream 一定要用这个吗,换个其他的文件流试试。
      

  6.   

    FileInputStream,FileOutputStream就能搞定呀!
      

  7.   

    java.lang.ClassCastException: java.io.ByteArrayInputStream 
      

  8.   

    你这个错误是在
    com.mrk.projectmanager.web.action.DataAction.add(DataAction.java:91) 这个方法里报的类型转换错误.上这个方法的91行看去