| @@ -1,52 +1,37 @@ | |||
| package me.chanjar.weixin.common.util.fs; | |||
| import java.io.File; | |||
| import java.io.FileOutputStream; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.nio.file.Files; | |||
| public class FileUtils { | |||
| /** | |||
| * 创建临时文件 | |||
| * | |||
| * @param inputStream | |||
| * @param inputStream 输入文件流 | |||
| * @param name 文件名 | |||
| * @param ext 扩展名 | |||
| * @param tmpDirFile 临时文件夹目录 | |||
| */ | |||
| public static File createTmpFile(InputStream inputStream, String name, String ext, File tmpDirFile) throws IOException { | |||
| File tmpFile; | |||
| if (tmpDirFile == null) { | |||
| tmpFile = File.createTempFile(name, '.' + ext); | |||
| } else { | |||
| tmpFile = File.createTempFile(name, '.' + ext, tmpDirFile); | |||
| } | |||
| tmpFile.deleteOnExit(); | |||
| try (FileOutputStream fos = new FileOutputStream(tmpFile)) { | |||
| int read = 0; | |||
| byte[] bytes = new byte[1024 * 100]; | |||
| while ((read = inputStream.read(bytes)) != -1) { | |||
| fos.write(bytes, 0, read); | |||
| } | |||
| File resultFile = File.createTempFile(name, '.' + ext, tmpDirFile); | |||
| fos.flush(); | |||
| return tmpFile; | |||
| } | |||
| resultFile.deleteOnExit(); | |||
| org.apache.commons.io.FileUtils.copyInputStreamToFile(inputStream, resultFile); | |||
| return resultFile; | |||
| } | |||
| /** | |||
| * 创建临时文件 | |||
| * | |||
| * @param inputStream | |||
| * @param inputStream 输入文件流 | |||
| * @param name 文件名 | |||
| * @param ext 扩展名 | |||
| */ | |||
| public static File createTmpFile(InputStream inputStream, String name, String ext) throws IOException { | |||
| return createTmpFile(inputStream, name, ext, null); | |||
| return createTmpFile(inputStream, name, ext, Files.createTempDirectory("weixin-java-tools-temp").toFile()); | |||
| } | |||
| } | |||
| @@ -7,21 +7,22 @@ import me.chanjar.weixin.common.util.http.RequestHttp; | |||
| import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; | |||
| import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; | |||
| import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor; | |||
| import okhttp3.*; | |||
| import okio.BufferedSink; | |||
| import okio.Okio; | |||
| import okhttp3.OkHttpClient; | |||
| import okhttp3.Request; | |||
| import okhttp3.Response; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import java.io.ByteArrayInputStream; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.net.URLEncoder; | |||
| import java.util.UUID; | |||
| /** | |||
| * Created by ecoolper on 2017/5/5. | |||
| * | |||
| * @author ecoolper | |||
| * @date 2017/5/5 | |||
| */ | |||
| public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor<OkHttpClient, OkHttpProxyInfo> { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @@ -31,9 +32,18 @@ public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor<OkHttpCli | |||
| } | |||
| @Override | |||
| public File execute(String uri, WxMpQrCodeTicket data) throws WxErrorException, IOException { | |||
| public File execute(String uri, WxMpQrCodeTicket ticket) throws WxErrorException, IOException { | |||
| logger.debug("OkhttpQrCodeRequestExecutor is running"); | |||
| //得到httpClient | |||
| if (ticket != null) { | |||
| if (uri.indexOf('?') == -1) { | |||
| uri += '?'; | |||
| } | |||
| uri += uri.endsWith("?") | |||
| ? "ticket=" + URLEncoder.encode(ticket.getTicket(), "UTF-8") | |||
| : "&ticket=" + URLEncoder.encode(ticket.getTicket(), "UTF-8"); | |||
| } | |||
| OkHttpClient client = requestHttp.getRequestHttpClient(); | |||
| Request request = new Request.Builder().url(uri).get().build(); | |||
| Response response = client.newCall(request).execute(); | |||
| @@ -42,12 +52,10 @@ public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor<OkHttpCli | |||
| String responseContent = response.body().string(); | |||
| throw new WxErrorException(WxError.fromJson(responseContent)); | |||
| } | |||
| File temp = File.createTempFile(UUID.randomUUID().toString(), ".png"); | |||
| try (BufferedSink sink = Okio.buffer(Okio.sink(temp))) { | |||
| sink.writeAll(response.body().source()); | |||
| try (InputStream inputStream = response.body().byteStream()) { | |||
| return FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), "jpg"); | |||
| } | |||
| temp.deleteOnExit(); | |||
| return temp; | |||
| } | |||
| } | |||
| @@ -5,11 +5,13 @@ import me.chanjar.weixin.common.exception.WxErrorException; | |||
| import me.chanjar.weixin.mp.api.WxMpService; | |||
| import me.chanjar.weixin.mp.api.test.ApiTestModule; | |||
| import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; | |||
| import org.apache.commons.io.FileUtils; | |||
| import org.apache.commons.lang3.RandomStringUtils; | |||
| import org.testng.*; | |||
| import org.testng.annotations.*; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| /** | |||
| * 测试用户相关的接口 | |||
| @@ -65,6 +67,12 @@ public class WxMpQrcodeServiceImplTest { | |||
| File file = this.wxService.getQrcodeService().qrCodePicture(ticket); | |||
| Assert.assertNotNull(file); | |||
| System.out.println(file.getAbsolutePath()); | |||
| try { | |||
| FileUtils.copyFile(file,new File("d:\\t.jpg")); | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| } | |||
| public void testQrCodePictureUrl() throws WxErrorException { | |||
| @@ -6,7 +6,6 @@ import com.thoughtworks.xstream.XStream; | |||
| import me.chanjar.weixin.common.util.xml.XStreamInitializer; | |||
| import me.chanjar.weixin.mp.api.WxMpConfigStorage; | |||
| import me.chanjar.weixin.mp.api.WxMpService; | |||
| import me.chanjar.weixin.mp.api.impl.WxMpServiceApacheHttpClientImpl; | |||
| import me.chanjar.weixin.mp.api.impl.WxMpServiceOkHttpImpl; | |||
| import java.io.IOException; | |||