import org.nutz.lang.Files; //导入方法依赖的package包/类

protected void download(String openid, String media_id, String url) {

File f = new File(mediaPath(openid, media_id));

if (f.exists() && f.length() > 1) {

log.info("Media aready exit > " + media_id);

return;

}

for (int i = 0; i < 3; i++) {

InputStream in = null;

OutputStream out = null;

File tmp = null;

try {

if (Strings.isBlank(url)) {

url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" + wxctx.getAPI(openid).getAccessToken() + "&media_id=" + media_id;

}

Response resp = Http.get(url, 60*1000);

if (resp.isOK()) {

in = resp.getStream();

tmp = File.createTempFile("nutzwx_media", ".media");

out = new FileOutputStream(tmp);

Streams.writeAndClose(out, in);

// 检查一下是不是报错

if (tmp.length() < 128) {

byte[] data = Files.readBytes(f);

if (data[0] == '{') { // 看上去是个json,悲催了...

// 多媒体文件怎么可能是{开头,抛错吧

throw new IllegalArgumentException("mediaId="+media_id+ ","+new String(data));

//try {

//NutMap map = Json.fromJson(NutMap.class, new String(data));

//if (map.containsKey("errcode") && map.getInt("errcode") != 0) {

//log.warn("download media fail >> " + new String(data));

//}

//} catch (Throwable e) {

//log.debug("not a json? ok", e);

//}

}

}

if (f.exists())

f.delete();

Files.makeDir(f.getParentFile());

tmp.renameTo(f);

WxMedia media = new WxMedia(media_id, resp.getHeader().getInt("Content-Length", 0), resp.getHeader().get("Content-Type"));

Json.toJsonFile(new File(f.getAbsolutePath()+".info"), media);

log.debug("media download success mediaId="+media_id);

break;

} else {

log.debugf("download %s fail, code=%s, content=%s", media_id, resp.getStatus(), resp.getContent());

}

} catch (Throwable e) {

log.infof("download %s fail", media_id, e);

} finally {

Streams.safeClose(in);

Streams.safeClose(out);

if (tmp != null)

tmp.delete();

}

}

}

java makedir用法_Java Files.makeDir方法代码示例相关推荐

  1. java secretkey用法_Java SecretKeyFactory.generateSecret方法代码示例

    本文整理汇总了Java中javax.crypto.SecretKeyFactory.generateSecret方法的典型用法代码示例.如果您正苦于以下问题:Java SecretKeyFactory ...

  2. java polygon 用法_Java Polygon.getBounds方法代码示例

    import java.awt.Polygon; //导入方法依赖的package包/类 private SelectionShape translatePointsToRealSize(Select ...

  3. java shape用法_Java PShape.scale方法代码示例

    import processing.core.PShape; //导入方法依赖的package包/类 public void updateAnim(){ if(pg_src_small == null ...

  4. java gettext用法_Java Context.getText方法代码示例

    import android.content.Context; //导入方法依赖的package包/类 /** * Song Details * * @param context * @param t ...

  5. java listview用法_Java ListView.setMultiChoiceModeListener方法代码示例

    import android.widget.ListView; //导入方法依赖的package包/类 @Override public void onActivityCreated(@Nullabl ...

  6. java gettext用法_Java Label.getText方法代码示例

    import javafx.scene.control.Label; //导入方法依赖的package包/类 private void initVBox(){ ClassNode node = (Cl ...

  7. java connection用法_Java Connection.close方法代码示例

    import sun.rmi.transport.Connection; //导入方法依赖的package包/类 /** * handleMessages decodes transport oper ...

  8. java settext用法_Java JFormattedTextField.setText方法代码示例

    import javax.swing.JFormattedTextField; //导入方法依赖的package包/类 /** * Creates a {@link JFormattedTextFie ...

  9. java args包_Java Args.positive方法代码示例

    import org.apache.http.util.Args; //导入方法依赖的package包/类 /** * Creates new instance of BHttpConnectionB ...

最新文章

  1. weblogic 故障转移
  2. Python视频编辑库:MoviePy
  3. semiautomatic annotated tools
  4. 《设计师要懂心理学》-第四章-人如何思考
  5. java gc log调优_Java 开启 gc 日志
  6. 剑指offer:63-66记录
  7. hdu 5925 搜索
  8. edwardcmh@cnblogs
  9. 江西瑞金计算机网络设计工资多少,瑞金java工资一般多少
  10. 模块化配电系统在高密度数据中心的应用
  11. linux 命令安装 wine,如何在Ubuntu 18.04 LTS上安装Wine
  12. MySQL的存储函数与存储过程的区别
  13. 外资公司章程标准范本
  14. mac倾倒废纸篓提示文件正在使用中的一种解决办法
  15. 《一次与IP MTU、TCP MSS导致SSL协商失败的案例》—那些年踩过的坑(二)
  16. 基于java+springboot+mysql的中小型超市进销存管理系统
  17. 云服务器怎么连,云主机连接操作步骤是怎样的?
  18. 计算机网络地址块例题,计算机网络习题计算机络习题.ppt
  19. python装饰器带参数函数二阶导数公式_机器学习【二】单变量线性回归
  20. ddr3ip核心_XILINX DDR3 IP核使用教程

热门文章

  1. new二维数组的几种方法
  2. DS18B20 理解与操作源码
  3. BS-GX-017基于SSM实现的在线考试管理系统
  4. python——聚类
  5. 鹅厂2020暑期实习第二次一面
  6. 通过性能计数器确定.net应用程序是否存在内存溢出
  7. 【Qt开发】编译时报undefined reference to问题的解决方案
  8. PSP DAILY软件功能说明书
  9. Windows快捷键集锦
  10. MYSQL数据库从A表把数据插入B表