zoukankan      html  css  js  c++  java
  • java模拟from表单提交,上传图片

    /**
         * java上传表单,有图片
         * @param urlStr     上传地址
         * @param textMap    表单参数
         * @param fileMap    文件参数 key:文件名称   value:文件地址
         * @return
         */
        @SuppressWarnings("rawtypes")
        public static String formUpload(String urlStr, Map<String, String> textMap,
                                        Map<String, String> fileMap) {
            String res = "";
            HttpURLConnection conn = null;
            // boundary就是request头和上传文件内容的分隔符
            String BOUNDARY = "---------------------------123821742118716";
            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("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());
                }
    
    
                // 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();
                        if (inputValue == null) {
                            continue;
                        }
                        File file = new File(inputValue);
                        String filename = file.getName();
    
                        //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
                        String 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=""
                                + inputName + ""; 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;
        }
  • 相关阅读:
    Visual SVN1.5以上版本下载及破解过程
    C#线程系列讲座(2):Thread类的应用
    a标签的href 和onclick
    Windows 服务快捷启动命令
    iframe 跨域自动适应高度
    修正认知:string、Empty和null三者的正确区别

    线索二叉树
    最大连续子序列
    寻找最近点对
  • 原文地址:https://www.cnblogs.com/chenziyu/p/9706107.html
Copyright © 2011-2022 走看看