热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用httpclient4.3.1上传文件的同时添加普通参数,服务端取不到参数

1234javax.servletjavax.servlet-api3.0.1provided123org.apache.httpcomponents  httpclient  4.3.1 123o



1
2
3
4
javax.servlet

javax.servlet-api

3.0.1

provided


1
2
3
org.apache.httpcomponents  

httpclient  

4.3.1



1
2
3
org.apache.httpcomponents  

httpcore  

4.3.1


1
2
3
org.apache.httpcomponents  

httpmime  

4.3.1

1
2
3
commons-fileupload

commons-fileupload

1.3.2

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    // 创建默认的httpClient实例.

    HttpClient httpclient = HttpClients.createDefault();

    // 创建httppost

    HttpPost httppost = new HttpPost(UploadService);

    // 创建参数队列

    FileBody bin = new FileBody(new File("D:\\download\\1.jpg"));

    // StringBody pathBody = new

    // StringBody("/20170317/",ContentType.DEFAULT_TEXT);



    HttpEntity reqEntity = MultipartEntityBuilder.create()

            .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)

            .addBinaryBody("uploadFile", new File("D:\\download\\1.jpg"))

            .addTextBody("path", "/20170317/").build();

    try {

        httppost.setEntity(reqEntity);

        System.out.println("executing request " + httppost.getURI());

        HttpResponse respOnse= httpclient.execute(httppost);

        try {

            HttpEntity entity = response.getEntity();

            if (entity != null) {

                System.out

                        .println("--------------------------------------");

                System.out.println("Response content: "

                        + EntityUtils.toString(entity, "UTF-8"));

                System.out

                        .println("--------------------------------------");

            }



        } catch (ClientProtocolException e) {

            e.printStackTrace();

        }

    } catch (UnsupportedEncodingException e1) {

        e1.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
    try {  

        System.out.println("IP:" + request.getRemoteAddr());  

        String path= request.getParameter("path");

        Part part1=  request.getPart("path");

        Iteratoriterator=request.getParts().iterator();  

       

        while (iterator.hasNext()) {//遍历客户端上传的所有文件                

            Part part = (Part) iterator.next();  

            System.out.println(part.getContentType());

        }  

        String username =request.getParameter("username");

        System.out.println("username:" + username);

        // 1、创建工厂类:DiskFileItemFactory  

        DiskFileItemFactory facotry = new DiskFileItemFactory();  

        String tempDir = getServletContext().getRealPath("/WEB-INF/upload");  

        facotry.setRepository(new File(tempDir));//设置临时文件存放目录  

        // 2、创建核心解析类:ServletFileUpload  

        ServletFileUpload upload = new ServletFileUpload(facotry);  

        upload.setHeaderEncoding("UTF-8");// 解决上传的文件名乱码  

        upload.setFileSizeMax(1024 * 1024 * 1024);// 单个文件上传最大值是1M  

        upload.setSizeMax(2048 * 1024 * 1024);//文件上传的总大小限制  



        // 3、判断用户的表单提交方式是不是multipart/form-data  

        boolean bb = upload.isMultipartContent(request);  

        if (!bb) {  

            response.setCharacterEncoding("utf-8");

            response.getWriter().print("不是multipart/form-data");

            return;  

        }  

        // 4、是:解析request对象的正文内容List  

        List items = upload.parseRequest(request);  



      String dirString =path.substring(0,path.lastIndexOf("/"));

       String filenameString=path.substring(path.lastIndexOf("/")+1);

        String storePath = getServletContext().getRealPath(dirString);// 上传的文件的存放目录  

        for (FileItem item : items) {  

            if (item.isFormField()) {  

                // 5、判断是否是普通表单:打印看看  

                String fieldName = item.getFieldName();// 请求参数名  

                String fieldValue = item.getString("UTF-8");// 请求参数值  

                System.out.println(fieldName + "=" + fieldValue);  

            } else {  

                // 6、上传表单:得到输入流,处理上传:保存到服务器的某个目录中,保存时的文件名是啥?  

                String fileName = item.getName();// 得到上传文件的名称 C:\Documents  

                                                    // and  

                                                    // Settings\shc\桌面\a.txt  

                                                    // a.txt  

                //解决用户没有选择文件上传的情况  

                if(fileName==null||fileName.trim().equals("")){  

                    continue;  

                }  

                fileName = fileName  

                        .substring(fileName.lastIndexOf("\") + 1);  

                String newFileName = fileName;  

                System.out.println("上传的文件名是:" + filenameString);  

                InputStream in = item.getInputStream();  

                String savePath = makeDir(storePath, filenameString);  

                OutputStream out = new FileOutputStream(savePath);  

                byte b[] = new byte[1024];  

                int len = 0;  

                while ((len = in.read(b)) != -1) {  

                    out.write(b, 0, len);  

                }  

                in.close();  

                out.close();  

                item.delete();//删除临时文件  

               

                response.getWriter().print(fileName);

            }  

        }  

    }catch(FileUploadBase.FileSizeLimitExceededException e){  

        response.getWriter().print("单个文件大小不能超出5M");

        request.setAttribute("message", "单个文件大小不能超出5M");  

        request.getRequestDispatcher("/message.jsp").forward(request,  

                response);  

    }catch(FileUploadBase.SizeLimitExceededException e){  

        response.getWriter().print("总文件大小不能超出7M");

}catch (Exception e) {  

        e.printStackTrace();  

        response.getWriter().print("上传失败");

    }

服务端 String path= request.getParameter("path"); 为null。
Part part1= request.getPart("path"); 这个是有的 但是变成流了


   



推荐阅读
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
兔女郎不会吧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有