JoddDownloadRequestExecutor.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package cn.nosum.http.jodd;
  2. import cn.nosum.http.RequestHttp;
  3. import cn.nosum.http.ResponseHandler;
  4. import cn.nosum.http.SimpleDownloadRequestExecutor;
  5. import cn.nosum.http.exception.HttpErrorException;
  6. import cn.nosum.http.proxy.HttpResponseProxy;
  7. import jodd.http.HttpConnectionProvider;
  8. import jodd.http.HttpRequest;
  9. import jodd.http.HttpResponse;
  10. import jodd.http.ProxyInfo;
  11. import org.apache.commons.lang3.StringUtils;
  12. import java.io.ByteArrayInputStream;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.io.OutputStream;
  16. import java.nio.charset.StandardCharsets;
  17. /**
  18. * JODD 下载请求封装.
  19. *
  20. * @author Young
  21. */
  22. public class JoddDownloadRequestExecutor extends SimpleDownloadRequestExecutor<HttpConnectionProvider, ProxyInfo> {
  23. public JoddDownloadRequestExecutor(RequestHttp<HttpConnectionProvider, ProxyInfo> requestHttp) {
  24. super(requestHttp);
  25. }
  26. public JoddDownloadRequestExecutor(RequestHttp<HttpConnectionProvider, ProxyInfo> requestHttp, ResponseHandler<OutputStream> responseHandler) {
  27. super(requestHttp, responseHandler);
  28. }
  29. @Override
  30. public OutputStream doExecute(String uri, String data) throws HttpErrorException, IOException {
  31. HttpRequest request = HttpRequest.get(uri);
  32. if (requestHttp.getRequestHttpProxy() != null) {
  33. requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy());
  34. }
  35. request.withConnectionProvider(requestHttp.getRequestHttpClient());
  36. HttpResponse response = request.send();
  37. response.charset(StandardCharsets.UTF_8.name());
  38. String contentType = response.header("Content-Type");
  39. // application/json; encoding=utf-8 下载媒体文件出错
  40. if (contentType != null && contentType.startsWith("application/json")) {
  41. throw new HttpErrorException(response.bodyText());
  42. }
  43. String fileName = new HttpResponseProxy(response).getFileName();
  44. if (StringUtils.isBlank(fileName)) {
  45. return null;
  46. }
  47. try (InputStream inputStream = new ByteArrayInputStream(response.bodyBytes())) {
  48. return transfer(inputStream);
  49. }
  50. }
  51. }