觅夜的黑 2016-12-07 02:35 采纳率: 12.5%
浏览 1996
已结题

ServletFileUpload 文件上传

做文件上传时,在其他项目里没问题。 这个就出问题了,感觉是被struts拦截了。最开始以为是jar包冲突,后来只留了一个版本的。发现还是有这个问题。注:上传问题,没有使用struts的
代码段:

 public class AServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
        File tmpDir = null;//初始化上传文件的临时存放目录
        File saveDir = null;//初始化上传文件后的保存目录
        public AServlet() {
        super();

        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request,response);

        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try{

        if(ServletFileUpload.isMultipartContent(request)){

        DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象

        dff.setRepository(tmpDir);//指定上传文件的临时目录

        dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte

        ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象

        sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸

        sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸

        FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合
        int i = 1;
        while(fii.hasNext()){

            FileItemStream fis = fii.next();//从集合中获得一个文件流

            if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域

            String fileName = fis.getName().substring(fis.getName().lastIndexOf(""));//获得上传文件的文件名
            fileName=i+".jpg";
            BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流

            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"/\\"+fileName)));//获得文件输出流

            Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹
            i++;
            }

        }

        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:///tmpdir//";

        tmpDir = new File(tmpPath);

        saveDir = new File(savePath);

        if(!tmpDir.isDirectory())

        tmpDir.mkdir();

        if(!saveDir.isDirectory())

        saveDir.mkdir();

        }

    }


struts片段:
 <constant name="struts.custom.i18n.resources" value="message"></constant>
    <constant name="struts.multipart.maxSize" value="104857600"></constant>
    <constant name="struts.multipart.parser" value="jakarta"></constant>
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.ognl.allowStaticMethodAccess" value="false" />
    <package name="struts2" extends="struts-default">
        <interceptors>
            <interceptor name="ucapInterceptor" class="com.linewell.ucap.interceptor.UcapInterceptor">
            </interceptor>
            <!-- 拦截器栈 -->
            <interceptor-stack name="ucapStack">
                <interceptor-ref name="ucapInterceptor">
                </interceptor-ref>
                <!-- 防止表单重复提交 -->
                <!--<interceptor-ref name="token"></interceptor-ref>    -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="ucapStack"></default-interceptor-ref>
        <!-- 全局跳转 -->
        <global-results>
            <result name="login" type="redirect">/login.jsp</result>
            <result name="error" type="redirect">/error.jsp</result>
        </global-results>
        <!--  全局异常-->
        <global-exception-mappings>
            <exception-mapping result="error" exception="com.linewell.ucap.resource.ManageException">
            </exception-mapping>
        </global-exception-mappings>

        <action name="BaseAction" class="com.linewell.ucap.action.base.BaseAction">
            <result name="success">/result.jsp</result>
        </action>

xml片段:
  <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>com.linewell.dw.AServlet</servlet-class>
        </servlet>
        <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/AServlet</url-pattern>
</servlet-mapping>
  • 写回答

2条回答 默认 最新

  • JPF1024 2016-12-07 06:49
    关注

    f12看下Network里面看看请求发过去了吗?

    然后debug一下java看看,走到哪一步出的问题(另外,你这个是抛出异常,还是文件没过去啊?)

    评论

报告相同问题?

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端