1. 程式人生 > >Java 後臺模擬POST上傳

Java 後臺模擬POST上傳

package org.lives.platform.upload.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 org.junit.Test;
import org.liufeng.weixin.pojo.AccessToken;
import org.liufeng.weixin.util.WeixinUtil;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class HttpPostUploadUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		//要上傳的檔案地址
		String filepath = "F:\\2.png";

		String urlStr = "http://localhost:8080/wxchar_menu/upload";

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

		textMap.put("name", "testname");

		Map<String, String> fileMap = new HashMap<String, String>();
		
        //隨便寫入的引數
		fileMap.put("userfile", filepath);

		String ret = formUpload(urlStr, textMap, fileMap);

		System.out.println(ret);

	}

	/**
	 * 
	 * @param urlStr
	 * @param textMap
	 * @param fileMap
	 * @return
	 */
	public static String formUpload(String urlStr, Map<String, String> textMap,
			Map<String, String> fileMap) {
		String res = "";
		HttpURLConnection conn = null;
		String BOUNDARY = "---------------------------123821742118716"; // boundary就是request頭和上傳檔案內容的分隔符
		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("\r\n").append("--").append(BOUNDARY)
							.append("\r\n");
					strBuf.append("Content-Disposition: form-data; name=\""
							+ inputName + "\"\r\n\r\n");
					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();
					String contentType = new MimetypesFileTypeMap()
							.getContentType(file);
					if (filename.endsWith(".png")) {
						contentType = "image/png";
					}
					if (contentType == null || contentType.equals("")) {
						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");

					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;
			}
		}
		return res;
	}

}

這樣的效果就相當於是頁面上的:

相關推薦

Java 後臺模擬POST

package org.lives.platform.upload.utils; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.Fi

java、 http模擬post檔案到服務端 模擬form檔案

需求是這樣的: **1,前後端分離,前端對接pc軟體進行檔案同步的介面,後的springboot微服務進行檔案接收和處理。 2,軟體不能直接呼叫微服務的介面進行上傳,只能先走一下前端controller進行轉發過來()。 3,這樣就只能用httpclien

PHP中curl模擬post及接收檔案

public function Action_Upload(){ $this->path_config(); exit(); $furl="@d:\develop\JMFrameworkWithDemo.rar"; $url= "http://localh

java 後臺模擬post表單請求傳送key-value資料亂碼

首先是key-value的模型: public class PostValue {       private String key;           private String value;        public PostValue(String key, S

Shell 程式設計用CURL 模擬POST 檔案 解決417 Expectation

話不多說直接拋程式碼 curl -H "Expect:" -F "passport=monitor_134" -F "[email protected]/root/monitor/result/mid_1_rule_1.txt" http://192.168.1

java後臺接受app圖片

package com.sujinabo.file; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;

Java 後臺POST模擬檔案

概述   廢話不多說,直接擼程式碼 程式碼   1、引入Maven包 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifac

java 後臺通過post請求 檔案

文章轉載:https://blog.csdn.net/wohaqiyi/article/details/77621517   import microservice.fpzj.control.base.BaseController; import org.springframewo

java模擬表單檔案,java通過模擬post方式提交表單實現圖片功能例項

package com.zdz.httpclient;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.

java Ueditor 百度編輯器 整合ssm後臺多圖片,無縫加入專案做新增儲存

效果圖  多圖片單圖片 上傳到後臺 本地儲存。編輯框回顯,複製貼上直接用,適合實際專案中做 內容發表,發表文章等等編輯自定義上傳圖片 多圖片到後臺路徑,看了網上一推教程,走了很多彎路,簡單明瞭 ,複製貼上直接用 專案地址 https://download.csdn.net/d

java後臺模擬生成GET/POST請求servlet

    Servlet是SUN指定的Java伺服器端程式設計規範,用以處理來自客戶端的請求,處理並做出響應的一套基礎API。Servlet是執行在Servlet容器中的Java小程式,容器執行在伺服器端,伺服器偵聽特定埠的請求,並解析請求地址,將請求物件送給容器中的Serv

Java 後臺模擬傳送 POST GET 請求

1.通過get方式傳遞伺服器資料 /** * 傳送GET請求 * @param path 請求路徑 * @param params 請求引數 * @param encoding 編碼 * @return 請求是否成功 */ private sta

Django後臺獲取前端post的檔案

由於初學Django所以對於其特有的表單模板和models中的filefiled並不是特別熟悉。因此在本次開發中還是依照以往自己在html中寫好圖片提交表單: 注意在<form>表單的定義中一定要加上enctype= “multipart/form-data

WinForm POST後臺接收

進行 emp post gb2312 exce cred stringbu 分隔線 adf 前端 using System;using System.Collections.Generic;using System.ComponentModel;using Sy

java後臺模擬傳送post請求,get也請用此種方式避免編碼問題

public static String geturl1(String geturl,String content) throws Exception { //請求的webse

java後臺模擬瀏覽器請求--GET/POST

package com.cplatform.movie.back.test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStrea

Java實現拖拽

itl filename 表單元 ava 100% ondrag nco write obj 原文:http://www.open-open.com/code/view/1437358795584 在項目開發中由於實際需求,需要開發拖拽上傳的功能,ok! 先看效果圖

iOS Post圖片, 文件流的形式

ssi 標準 請求 圖片服務器 dict html mimetype object 屬性 最近看到群裏很多小夥伴有問上傳圖片服務器收不到, 解析不了. 可以說就一個屬性 ContentType , 不論你使用第三方的AFN, 還是自己封裝NSURLSesstion. 都

eclipse用法之java中文件的操作

服務器 lock 內容 div use continue type dex ole 一、單文件上傳:    1.首先前端頁面的編寫只有一個註意項:就是上傳的文件中有圖片時更改表單項的entype屬性為:enctype="multipart/form-data"       

fastDFS與java整合文件下載

snap spa generate mapping oba exe try file getclass 準備 下載fastdfs-client-java源碼 源碼地址 密碼:s3sw 修改pom.xml 第一個plugins是必需要的,是maven用來編譯的插件,第二