Java 微信公众号上传永久素材的方法


用 Java 实现微信公众号上传永久素材,代码如下:

	/**
	 * 上传其他永久素材(图片素材的上限为5000,其他类型为1000)
	 * @param appid
	 * @param secret
	 * @return
	 * @throws Exception
	 */
	public JSONObject addMaterialEver(String appid, String secret,File file,String type) throws Exception {
		try {
			PrintUtil.println("开始上传"+type+"永久素材---------------------");	
			
			//开始获取证书
			String accessToken=new AccessTokenBizImpl().getAccessToken(appid, secret);			
			if(!StringUtil.isEmptyString(accessToken)){
				PrintUtil.println("accessToken is null");	
				return null;
			}			
			
			//上传素材	
			String path="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token="+accessToken+"&type="+type;
			String result=HttpsUtil.connectHttpsByPost(path, null, file);
			result=result.replaceAll("[\\\\]", "");
			PrintUtil.println("result:"+result);	
			JSONObject resultJSON=JSONObject.fromObject(result);
			if(resultJSON!=null){
				if(resultJSON.get("media_id")!=null){
					PrintUtil.println("上传"+type+"永久素材成功");
					return resultJSON;
				}else{
					PrintUtil.println("上传"+type+"永久素材失败");
				}
			}
			
			return null;
		} catch (Exception e) {
			PrintUtil.println("程序异常", e);
			throw e;
		}finally{
			PrintUtil.println("结束上传"+type+"永久素材---------------------");	
		}
	}
	
	/**
	 * 上传图片到微信服务器(本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下)
	 * @param appid
	 * @param secret
	 * @param type
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public JSONObject addMaterialEver(String appid, String secret,File file) throws Exception {
		try {
			PrintUtil.println("开始上传图文消息内的图片---------------------");	
			
			//开始获取证书
			String accessToken=new AccessTokenBizImpl().getAccessToken(appid, secret);			
			if(!StringUtil.isEmptyString(accessToken)){
				PrintUtil.println("accessToken is null");	
				return null;
			}			
			
			//上传图片素材	
			String path="https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="+accessToken;
			String result=HttpsUtil.connectHttpsByPost(path, null, file);
			result=result.replaceAll("[\\\\]", "");
			PrintUtil.println("result:"+result);	
			JSONObject resultJSON=JSONObject.fromObject(result);
			if(resultJSON!=null){
				if(resultJSON.get("url")!=null){
					PrintUtil.println("上传图文消息内的图片成功");
					return resultJSON;
				}else{
					PrintUtil.println("上传图文消息内的图片失败");
				}
			}
			
			return null;
		} catch (Exception e) {
			PrintUtil.println("程序异常", e);
			throw e;
		}finally{
			PrintUtil.println("结束上传图文消息内的图片---------------------");	
		}
	}

具体的HTTPS请求:

    		String result =null;
			con.setDoInput(true);

			con.setDoOutput(true);

			con.setUseCaches(false); // post方式不能使用缓存

			// 设置请求头信息

			con.setRequestProperty("Connection", "Keep-Alive");

			con.setRequestProperty("Charset", "UTF-8");
			// 设置边界

			String BOUNDARY = "----------" + System.currentTimeMillis();

			con.setRequestProperty("Content-Type",
					"multipart/form-data; boundary="

					+ BOUNDARY);

			// 请求正文信息

			// 第一部分:

			StringBuilder sb = new StringBuilder();

			sb.append("--"); // 必须多两道线

			sb.append(BOUNDARY);

			sb.append("\r\n");

			sb.append("Content-Disposition: form-data;name=\"media\";filelength=\""+file.length()+"\";filename=\""

					+ file.getName() + "\"\r\n");

			sb.append("Content-Type:application/octet-stream\r\n\r\n");

			byte[] head = sb.toString().getBytes("utf-8");

			// 获得输出流

			OutputStream out = new DataOutputStream(con.getOutputStream());

			// 输出表头

			out.write(head);

			// 文件正文部分

			// 把文件已流文件的方式 推入到url中

			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[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线

			out.write(foot);

			out.flush();

			out.close();

			StringBuffer buffer = new StringBuffer();

			BufferedReader reader = null;

			try {

				// 定义BufferedReader输入流来读取URL的响应

				reader = new BufferedReader(new InputStreamReader(con.getInputStream()));

				String line = null;

				while ((line = reader.readLine()) != null) {

					buffer.append(line);

				}

				if (result == null) {

					result = buffer.toString();

				}

			} catch (IOException e) {

				System.out.println("发送POST请求出现异常!" + e);

				e.printStackTrace();

				throw new IOException("数据读取异常");

			} finally {

				if (reader != null) {

					reader.close();

				}

			}
			return result;



猜你喜欢

转载自blog.csdn.net/yh88356656/article/details/50685599