爱玺玺

爱玺玺的生活日记本。wx:lb87626

java 模拟layload 图文混发post

给新氧做的,测试没有问题。文字用个map,图片用个map,域名对应map的键名。


package utils;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;


import javax.activation.MimetypesFileTypeMap;


import com.alibaba.fastjson.JSON;


/**

 * java通过模拟post方式提交表单实现图片上传功能实例

 * 其他文件类型可以传入 contentType 实现

 */

@SuppressWarnings("unused")

public class PostFileImg {

public static void main(String[] args) {

String picpath="D:/sy.jpg";

MyUploadImage(picpath);

}


    private static String MyUploadImage(String picPath){

        String url = "https://b.soyoung.com/saasV2/sendMessage";

        String reader = picPath;

        File file=new File(picPath);

        /*模拟文本域*/

        Map<String, String> textMap = new HashMap<String, String>();

        textMap.put("type", "2");

        textMap.put("fid", "14949849");

        textMap.put("host_uid","12730430");

        textMap.put("RichText_content", "你好");

        textMap.put("saas_token", "115cf30801dbecd79ef3724aefb12472");

        textMap.put("saas_timestamp", "1665049992");

        textMap.put("saas_sign", "aa20120b72540372683ab5c5d9a5060f");

        

        //设置file的name,路径,模拟上传文件

        Map<String, String> fileMap = new HashMap<String, String>();

        System.out.println("文件路径:"+reader);

        fileMap.put("imgFile", reader);

        String contentType = "";//image/png

        

        String ret = formUpload(url, textMap, fileMap,contentType);

        return ret;

    }


    /**

     * 上传图片

     * @param urlStr

     * @param textMap

     * @param fileMap

     * @param contentType 没有传入文件类型默认采用application/octet-stream

     * contentType非空采用filename匹配默认的图片类型

     * @return 返回response数据

     */

    @SuppressWarnings("rawtypes")

    private static String formUpload(String urlStr, Map<String, String> textMap,

                                    Map<String, String> fileMap,String contentType) {

        String res = "";

        HttpURLConnection conn = null;

        // boundary就是request头和上传文件内容的分隔符

        String BOUNDARY = "------WebKitFormBoundaryogf0mTCQMuKITpNH";

        try {

            URL url = new URL(urlStr);

            conn = (HttpURLConnection) url.openConnection();

            conn.setConnectTimeout(5000);

            conn.setReadTimeout(30000);

            conn.setDoOutput(true);

            conn.setDoInput(true);

            conn.setUseCaches(false);

            conn.setRequestMethod("POST");

            

            conn.setRequestProperty("Accept", "application/json, text/plain, */*");

            conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9");

            conn.setRequestProperty("Connection", "keep-alive");

            conn.setRequestProperty("Content-Length", "316488");

            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+BOUNDARY);

            conn.setRequestProperty("Cookie", Tools.readFile("txt/cookie.dll"));

            conn.setRequestProperty("Host", "b.soyoung.com");

            conn.setRequestProperty("Origin", "https://b.soyoung.com");

            conn.setRequestProperty("Referer", "https://b.soyoung.com/wb/ims/msg?fid=26885341&host_uid=12730430");

            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");


            

            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("\r\n").append("--").append(BOUNDARY)

                            .append("\r\n");

                    strBuf.append("Content-Disposition:form-data;name=\""

                            + inputName + "\"\r\n\r\n");

                    strBuf.append(inputValue);

                }

                System.out.println(strBuf.toString());

                out.write(strBuf.toString().getBytes());

            }

            // file

            if (fileMap != null) {

                Iterator iter = fileMap.entrySet().iterator();

                while (iter.hasNext()) {

                    Map.Entry entry = (Map.Entry) iter.next();

                    String inputName = (String) entry.getKey();

                    String inputValue = (String) entry.getValue();

                    System.out.println("图片路径:"+inputValue);

                    if (inputValue == null) {

                        continue;

                    }

                    File file = new File(inputValue);

                    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("\r\n").append("--").append(BOUNDARY)

                            .append("\r\n");

                    strBuf.append("Content-Disposition:form-data;name=\""

                            + inputName + "\";filename=\"" + filename

                            + "\"\r\n");

                    strBuf.append("Content-Type:" + contentType + "\r\n\r\n");

                    System.out.println("Content-Disposition:form-data;name=\""

                            + inputName + "\";filename=\"" + filename

                            + "\"\r\n");

                    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 = ("\r\n--" + BOUNDARY + "--\r\n").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("\n");

            }

            res = strBuf.toString();

            reader.close();

            reader = null;

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (conn != null) {

                conn.disconnect();

                conn = null;

            }

        }

        System.out.println(res);

        return res;

    }


}


发表评论:

Powered By Z-BlogPHP 1.4 Deeplue Build 150101

Copyright Your WebSite.Some Rights Reserved.

蜀ICP备11021721号-5