| | |
| | | package com.panzhihua.common.utlis; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.panzhihua.common.constants.SecurityConstants; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import java.io.*; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.URL; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Map; |
| | | |
| | | import org.apache.commons.fileupload.FileItem; |
| | | import org.apache.commons.fileupload.FileItemFactory; |
| | | import org.apache.commons.fileupload.disk.DiskFileItemFactory; |
| | |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import org.springframework.web.multipart.commons.CommonsMultipartFile; |
| | | |
| | | import java.io.*; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.URL; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.panzhihua.common.constants.SecurityConstants; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class WxXCXTempSend { |
| | | |
| | | public static final String APP_ID = "wx0cef797390444b75"; |
| | | private static final String APP_SECRET = "c7ea9aaa7e391a487e8a5b9ba61045d1"; |
| | | private static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"; |
| | | private static String APP_IMAGE_URL = "https://www.psciio.com//idcard/8fa82cfba258498eab2fa818220fb592.jpg"; |
| | | private static String APP_IMAGE_NAME = "5.jpg"; |
| | | |
| | | public static final String APP_ID = "wx0cef797390444b75"; |
| | | private static final String APP_SECRET = "c7ea9aaa7e391a487e8a5b9ba61045d1"; |
| | | |
| | | @Autowired |
| | | private StringRedisTemplate redisTemplate; |
| | | |
| | | /** |
| | | * url转变为 MultipartFile对象 |
| | | * |
| | | * @param url |
| | | * @param fileName |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | private static MultipartFile createFileItem(String url, String fileName) throws Exception { |
| | | FileItem item = null; |
| | | try { |
| | | HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); |
| | | conn.setReadTimeout(30000); |
| | | conn.setConnectTimeout(30000); |
| | | // 设置应用程序要从网络连接读取数据 |
| | | conn.setDoInput(true); |
| | | conn.setRequestMethod("GET"); |
| | | if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { |
| | | InputStream is = conn.getInputStream(); |
| | | |
| | | FileItemFactory factory = new DiskFileItemFactory(16, null); |
| | | String textFieldName = "uploadfile"; |
| | | item = |
| | | factory.createItem(textFieldName, ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName); |
| | | OutputStream os = item.getOutputStream(); |
| | | |
| | | int bytesRead = 0; |
| | | byte[] buffer = new byte[8192]; |
| | | while ((bytesRead = is.read(buffer, 0, 8192)) != -1) { |
| | | os.write(buffer, 0, bytesRead); |
| | | } |
| | | os.close(); |
| | | is.close(); |
| | | } |
| | | } catch (IOException e) { |
| | | throw new RuntimeException("文件下载失败", e); |
| | | } |
| | | |
| | | return new CommonsMultipartFile(item); |
| | | } |
| | | |
| | | /** |
| | | * 获取小程序token,(ps:0=token获取失败) |
| | |
| | | redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME);//如果过期则删除 |
| | | mediaId = getAppMediaId(accessToken); |
| | | valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID, mediaId); |
| | | valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME, System.currentTimeMillis() + 259000000 + ""); |
| | | valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME, |
| | | System.currentTimeMillis() + 259000000 + ""); |
| | | }else{ |
| | | mediaId = valueOperations.get(SecurityConstants.APPLETS_ACCESS_MEDIA_ID); |
| | | } |
| | | }else{ |
| | | mediaId = getAppMediaId(accessToken); |
| | | valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID, mediaId); |
| | | valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME, System.currentTimeMillis() + 259000000 + ""); |
| | | valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME, |
| | | System.currentTimeMillis() + 259000000 + ""); |
| | | } |
| | | return mediaId; |
| | | } |
| | |
| | | log.error("上传临时图片素材失败,错误原因:" + e.getMessage()); |
| | | } |
| | | return appMediaId; |
| | | } |
| | | |
| | | /** |
| | | * url转变为 MultipartFile对象 |
| | | * @param url |
| | | * @param fileName |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | private static MultipartFile createFileItem(String url, String fileName) throws Exception{ |
| | | FileItem item = null; |
| | | try { |
| | | HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); |
| | | conn.setReadTimeout(30000); |
| | | conn.setConnectTimeout(30000); |
| | | //设置应用程序要从网络连接读取数据 |
| | | conn.setDoInput(true); |
| | | conn.setRequestMethod("GET"); |
| | | if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { |
| | | InputStream is = conn.getInputStream(); |
| | | |
| | | FileItemFactory factory = new DiskFileItemFactory(16, null); |
| | | String textFieldName = "uploadfile"; |
| | | item = factory.createItem(textFieldName, ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName); |
| | | OutputStream os = item.getOutputStream(); |
| | | |
| | | int bytesRead = 0; |
| | | byte[] buffer = new byte[8192]; |
| | | while ((bytesRead = is.read(buffer, 0, 8192)) != -1) { |
| | | os.write(buffer, 0, bytesRead); |
| | | } |
| | | os.close(); |
| | | is.close(); |
| | | } |
| | | } catch (IOException e) { |
| | | throw new RuntimeException("文件下载失败", e); |
| | | } |
| | | |
| | | return new CommonsMultipartFile(item); |
| | | } |
| | | |
| | | /** |
| | |
| | | sb.append("\r\n"); |
| | | sb.append("Content-Disposition: form-data;name=\"media\";filename=\"" + fileName + "\"\r\n"); |
| | | sb.append("Content-Type:application/octet-stream\r\n\r\n"); |
| | | byte[] head = sb.toString().getBytes("utf-8"); |
| | | byte[] head = sb.toString().getBytes(StandardCharsets.UTF_8); |
| | | // 获得输出流 |
| | | OutputStream out = new DataOutputStream(con.getOutputStream()); |
| | | // 输出表头 |
| | |
| | | } |
| | | in.close(); |
| | | // 结尾部分 |
| | | byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线 |
| | | byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(StandardCharsets.UTF_8);// 定义最后数据分隔线 |
| | | out.write(foot); |
| | | out.flush(); |
| | | out.close(); |