• 实现多图片上传加上多参数上传


      ---- 昨天的上传到接口没有考虑到图片的上传,现在改正以下喔,话不多说上代码....

    @SuppressWarnings("rawtypes")
        public static String formUpload(String urlStr, Map<String, String> textMap,
                                       String [] fileMap,String contentType) {
            String res = "";
            sun.net.www.protocol.http.HttpURLConnection conn = null;
            // boundary就是request头和上传文件内容的分隔符
            String BOUNDARY = "---------------------------123821742118716";
            try {
                URL url = new URL(urlStr);
                conn = (sun.net.www.protocol.http.HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(30000);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("User-Agent",
                        "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
                conn.setRequestProperty("Content-Type",
                        "multipart/form-data; boundary=" + BOUNDARY);
                OutputStream out = new DataOutputStream(conn.getOutputStream());
                // text
                if (textMap != null) {
                    StringBuffer strBuf = new StringBuffer();
                    Iterator iter = textMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        strBuf.append("
    ").append("--").append(BOUNDARY)
                                .append("
    ");
                        strBuf.append("Content-Disposition: form-data; name=""
                                + inputName + ""
    
    ");
                        strBuf.append(inputValue);
                    }
                    out.write(strBuf.toString().getBytes("utf-8"));
                }
                // file
                if (fileMap != null) {
                    for (int i = 0; i <fileMap.length ; i++) {
                        File file = new File(fileMap[i]);
                        String filename = file.getName();
                        //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
                        contentType = new MimetypesFileTypeMap().getContentType(file);
                        //contentType非空采用filename匹配默认的图片类型
                        if(!"".equals(contentType)){
                            if (filename.endsWith(".png")) {
                                contentType = "image/png";
                            }else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) {
                                contentType = "image/jpeg";
                            }else if (filename.endsWith(".gif")) {
                                contentType = "image/gif";
                            }else if (filename.endsWith(".ico")) {
                                contentType = "image/image/x-icon";
                            }
                        }
                        if (contentType == null || "".equals(contentType)) {
                            contentType = "application/octet-stream";
                        }
                        StringBuffer strBuf = new StringBuffer();
                        strBuf.append("
    ").append("--").append(BOUNDARY)
                                .append("
    ");
                        strBuf.append("Content-Disposition: form-data; name=""
                                + "pictures" + ""; filename="" + filename
                                + ""
    ");
                        strBuf.append("Content-Type:" + contentType + "
    
    ");
                        out.write(strBuf.toString().getBytes());
                        DataInputStream in = new DataInputStream(
                                new FileInputStream(file));
                        int bytes = 0;
                        byte[] bufferOut = new byte[1024];
                        while ((bytes = in.read(bufferOut)) != -1) {
                            out.write(bufferOut, 0, bytes);
                        }
                        in.close();
                    }
              }
                byte[] endData = ("
    --" + BOUNDARY + "--
    ").getBytes();
                out.write(endData);
                out.flush();
                out.close();
                // 读取返回数据
                StringBuffer strBuf = new StringBuffer();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    strBuf.append(line).append("
    ");
                }
                res = strBuf.toString();
                reader.close();
                reader = null;
            } catch (Exception e) {
                System.out.println("发送POST请求出错。" + urlStr);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
            return res;
        }

        ---- 举个应用下例子喔~~

    public static void main(String[] args) throws Exception {
            String uri ="接口....";
            Map<String, String> map = new HashMap<>();
           map.put("key", "测试单号");
           map.put("title", "测试任务");
           //当前时间
           map.put("createTime", TimeUtils.currentTime());
           //当前时间往后延长num天数
           map.put("limitTime", TimeUtils.plusDay(5));
           map.put("reachId", "12568");
           //调用百度地图api获取到的经纬度,为了方便测试直接传了
           map.put("point", "POINT(11.11111 12.22222)");
           map.put("desc", "测试任务");
           map.put("content", "测试内容");
           String[] file ={"F:\xx\141f74027edd0462867bfad0cb530e45.jpg","F:\xx\50097c4f7e180741919337ba1244ceb6.jpg","F:\xx\tfa.jpg"};
          //上传的图片...
           String contentType="image/jpg";
           String s1 = formUpload(uri, map, file,contentType);
           System.out.println(s1);
       }    

    ps:该方法是我本地数据测试成功的明天再具体测试下,发现问题会修改的,如果各位打来发现有啥问题可以告诉我下谢谢啦~~~

    同时上面的方法还可以优化~比如boundary= ----可以优化为自定生成的uuid(String boundary = UUID.randomUUID().toString())

    参考连接:https://blog.csdn.net/Icywind1/article/details/85628099

    最后写的拉闸也别喷我哈QVQ

  • 相关阅读:
    Log4Net 自定义级别,分别记录到不同的文件中
    带着忧伤,寻觅快乐
    程序员进阶学习书籍
    PHP编码技巧
    PHP精度问题
    Laravel5 构造器高级查询条件写法
    正则表达式 /i /g /m /ig /gi
    MySQL运算符的优先级
    PHP获取当前页面完整路径URL
    使用ssl模块配置同时支持http和https并存
  • 原文地址:https://www.cnblogs.com/Lingzsj/p/13155289.html
Copyright © 2020-2023  润新知