@@ -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; | |||