接口上传文件

/**
	 * @param url       请求地址
	 * @param map       请求的参数
	 * @param body_data 上传的文件二进制内容
	 * @param fileName  文件路径
	 * @param charset   字符集
	 * @return
	 */
	public static String fileUpload(String url, Map<String, String> map,
									byte[] body_data, String fileName, String charset) {
		final String NEWLINE = "\r\n";
		final String PREFIX = "--";
		final String BOUNDARY = "#";
		HttpURLConnection httpConn = null;
		BufferedInputStream bis = null;
		DataOutputStream dos = null;
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		try {
			URL urlObj = new URL(url);
			httpConn = (HttpURLConnection) urlObj.openConnection();
			httpConn.setDoInput(true);
			httpConn.setDoOutput(true);
			httpConn.setRequestMethod("POST");
			httpConn.setUseCaches(false);
			httpConn.setRequestProperty("Connection", "Keep-Alive");
			httpConn.setRequestProperty("Accept", "*/*");
			httpConn.setRequestProperty("Accept-Encoding", "gzip, deflate");
			httpConn.setRequestProperty("Cache-Control", "no-cache");
			httpConn.setRequestProperty("Content-Type",
					"multipart/form-data; boundary=" + BOUNDARY);
			httpConn.setRequestProperty(
					"User-Agent",
					"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)");
			httpConn.connect();

			dos = new DataOutputStream(httpConn.getOutputStream());
			if (map != null && !map.isEmpty()) {
				for (Map.Entry<String, String> entry : map.entrySet()) {
					String key = entry.getKey();
					String value = map.get(key);
					dos.writeBytes(PREFIX + BOUNDARY + NEWLINE);
					dos.writeBytes("Content-Disposition: form-data; "
							+ "name=\"" + key + "\"" + NEWLINE);
					dos.writeBytes(NEWLINE);
					dos.writeBytes(URLEncoder.encode(value.toString(), charset));
					dos.writeBytes(NEWLINE);
				}
			}

			if (body_data != null && body_data.length > 0) {
				dos.writeBytes(PREFIX + BOUNDARY + NEWLINE);
				dos.writeBytes("Content-Disposition: form-data; " + "name=\""
						+ "file" + "\"" + "; filename=\"" + fileName
						+ "\"" + NEWLINE);
				dos.writeBytes(NEWLINE);
				dos.write(body_data);
				dos.writeBytes(NEWLINE);
			}
			dos.writeBytes(PREFIX + BOUNDARY + PREFIX + NEWLINE);
			dos.flush();

			byte[] buffer = new byte[8 * 1024];
			int c = 0;
			if (httpConn.getResponseCode() == 200) {
				bis = new BufferedInputStream(httpConn.getInputStream());
				while ((c = bis.read(buffer)) != -1) {
					baos.write(buffer, 0, c);
					baos.flush();
				}
			}
			return new String(baos.toByteArray(), charset);
		} catch (HttpHostConnectException e) {
			// 找不到服务,但IP通
			throw new RpcException(ClientResCode.RC_HTTP_HTTPHOSTCONNECTEXCEPTION, e.getMessage());
		} catch (UnknownHostException e) {
			// IP错误
			throw new RpcException(ClientResCode.RC_HTTP_UNKNOWNHOSTEXCEPTION, e.getMessage());
		} catch (ConnectTimeoutException e) {
			// IP不通,连接超时
			throw new RpcException(ClientResCode.RC_CONNECT_TIMEOUT, e.getMessage());
		} catch (SocketTimeoutException e) {
			throw new RpcException(ClientResCode.RC_REQUEST_TIMEOUT, e.getMessage());
		} catch (Exception e) {
			throw new RpcException(ClientResCode.RC_OTHER_NETWORK_ERROR, e.getMessage());
		} finally {
			try {
				if (dos != null) {
					dos.close();
				}
				if (bis != null) {
					bis.close();
				}
				if (baos != null) {
					baos.close();
				}
				httpConn.disconnect();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
/**
     * 文件上传接口
     *
     * @param url
     * @param params
     * @param rpcBaseReq
     * @return
     * @throws RpcException
     * @throws Exception
     */
    public String post(String url, String params) throws RpcException, Exception {

        File file = new File(params);// params:pdf所在路径
        byte[] bytes = File2byte(file);
        FileInputStream fileInputStream = new FileInputStream(file);
//        MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(),
//                ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
        String jsonResult = HttpUtil.fileUpload(url, new HashMap<>(),bytes,file.getName(),"utf-8");
//        System.out.println(jsonResult);
        return jsonResult;

    }

    /**
     * 将文件转换成byte数组
     * @param tradeFile
     * @return
     */
    public static byte[] File2byte(File tradeFile){
        byte[] buffer = null;
        try
        {
            FileInputStream fis = new FileInputStream(tradeFile);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int n;
            while ((n = fis.read(b)) != -1)
            {
                bos.write(b, 0, n);
            }
            fis.close();
            bos.close();
            buffer = bos.toByteArray();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        return buffer;
    }
上一篇:秒杀项目


下一篇:linux三剑客之一(sed)