热门标签 | 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"); 这个是有的 但是变成流了


   



推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
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社区 版权所有