java远程连接服务器(或第三方接口)

java 连接服务器,以multipart/form-data形式。上传文件或图片参数
注意:在拼接格式的时候一定要注意空格 ,要不容易出错。
在这里插入图片描述

package com.aem.sheep.util;

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 javax.activation.MimetypesFileTypeMap;

import org.springframework.stereotype.Component;

@Component
public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 服务器或第三方接口地址
		String urlStr = "http://192.168.1.1:80/param/form";
		String res = "";
		HttpURLConnection conn = null;
		// PrintWriter out = null;
		// boundary就是request头和上传文件内容的分隔符
		String BOUNDARY = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
		try {
			StringBuffer strBuf = new StringBuffer();
			String str = "";
			URL url = new URL(urlStr);
			conn = (HttpURLConnection) url.openConnection();

			conn.setRequestProperty("Content-Type",
					"multipart/form-data; boundary=" + BOUNDARY);
			conn.setRequestProperty("Accept", "*/*");
			conn.setRequestProperty("Cache-Control", "no-cache");
			conn.setRequestProperty("User-Agent",
					"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
			conn.setRequestProperty("Connection", "Keep-Alive");
			conn.setRequestProperty("cache-control", "no-cache");
			conn.setRequestProperty("Charsert", "UTF-8");
			conn.setDoOutput(true);
			conn.setDoInput(true);
			OutputStream out = new DataOutputStream(conn.getOutputStream());
			// text

			str += "\r\n" + "--" + BOUNDARY + "\r\n"
					+ "Content-Disposition: form-data; name=\"" + "param_id"
					+ "\"" + "\r\n\r\n";
			str += "1011";
			// CacheUtil.REALPATH 指服务器的路径
			// 上传文件或图片地址
			String filePath = CacheUtil.REALPATH + "img\\" + "123" + ".jpg";
			File file = new File(filePath);
			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();
			str += "\r\n" + "--" + BOUNDARY + "\r\n"
					+ "Content-Disposition: form-data; name=\"" + "img"
					+ "\"; filename=\"" + filename + "\"\r\n";
			str += "Content-Type: " + contentType + "\r\n\r\n";
			System.out.println("发送:" + str);
			out.write(str.getBytes("utf-8"));
			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();
			str += "\r\n--" + BOUNDARY + "--\r\n";
			out.write(str.getBytes("utf-8"));//以utf8编码形式发送
			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();
			System.out.println("返回信息:" + res);
			reader.close();
			reader = null;
		} catch (Exception e) {
			System.out.println("发送POST请求出错。" + urlStr);
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.disconnect();
				conn = null;
			}

		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值