微信借口中获取素材的接口返回只是一个缓存的文件流 InputStream,

接口中请求永久图片素材返回的是 InputStream;

接口项目获取到 InputStream 可以直接通过文件流写到文件中(保存文件到weixin-java-mp 项目所在服务器上)

我做的公众号管理平台需要请求 weixin-java-mp 项目去下载素材文件,两个项目不在同一台服务器上,如何将weixin-java-mp项目中获取到的这个InputStream 传递到另一个项目中,获取到之后如何解析

解决方法:文件流传递文件,通过请求微信接口获取到的文件流为java.io.InputStream,想讲输出流传递到另一个项目,需要讲输入流转化为输出流抛出去

文件流处理(服务接口)

@PostMapping("/getimage")
    public void getImage(String s,HttpServletRequest request,HttpServletResponse response) throws Exception{
        InputStream inStream = this.wxService.getMaterialService().materialImageOrVoiceDownload(s); //从微信接口获取的输入流
        byte[] data =IOUtils.toByteArray(inStream);  //讲输出流转换成字节数组
        inStream.close();  
        response.setContentType("image/png");    //设置文件格式,这里已经确定得到的是图片格式,如果时其他格式的文件,区分处理
        OutputStream stream = response.getOutputStream();  //创建输出流
        stream.write(data);    //将数据写入输出流
        stream.flush();  
        stream.close();  
    }

文件流接收

// 下载缩略图,用于本地展示
                                Response res = Okhttp.getfile(url, parameter);  //请求接口
                                InputStream in = res.body().byteStream();  //取出接口返回的文件流
                                String picurl = downloadPicture(in);   //保存文件

// 保存图片文件的方法
    public String downloadPicture(InputStream thumbmedia) {
        try {
            String curDate = DateTime.get(DateTime.FORMATYYYYMMDD, new Date());
            String folder = getFullPath() + ".." + FILE_DIR + curDate + "/";
            File dir = new File(folder);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            String fileseq = seqRule.get(YmStatic.SEQ_FILEUPD_SEQ);
            String absoulteFileName = folder + fileseq; // 绝对路径
            String relativeFileName = FILE_DIR + curDate + "/" + fileseq;
            boolean saveflag = FileMan.SaveInputStream(thumbmedia, absoulteFileName);
            if (saveflag) {
                String fileType = FileType.getFileType(absoulteFileName);
                if (!StringMan.isNull(fileType)) {
                    FileMan.renameFile(absoulteFileName, absoulteFileName + "." + fileType);
                    relativeFileName += "." + fileType;
                }
                return relativeFileName;
            } else {
                return "";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

okhttp请求文件异常解决方法的更多相关文章

  1. (转)ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法

    早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...

  2. ueditor上传大容量视频报http请求错误的解决方法

    故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...

  3. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法

    最近在做项目的时候需要操作ftp进行文件的上传下载,但在调用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的时候总 ...

  4. win10系统桌面快捷键图标异常解决方法

    win10系统桌面快捷键图标异常解决方法 前言: 有一次我的一个图标变成白色,找到:https://jingyan.baidu.com/article/948f5924148e67d80ef5f947 ...

  5. SVN Attempted to lock an already-locked dir异常解决方法

    Attempted to lock an already-locked dir异常解决方法 eclipse或myeclipse用svn提交的时候报错: Attempted to lock an alr ...

  6. 安装visual studio2017后 首次启动出现ActivityLog.xml异常解决方法

    安装visual studio2017后 首次启动出现ActivityLog.xml异常解决方法 ps:操作系统是win10 在官网下载了vs2017社区版按照教程(教程链接在文末)安装完成之后,首次 ...

  7. Android 异常解决方法【汇总】

    (1)异常:Android中引入第三方Jar包的方法(Java.lang.NoClassDefFoundError解决办法) 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方 ...

  8. Tomcat部署java项目java.lang.OutOfMemoryError异常解决方法

    java.lang.OutOfMemoryError异常解决方法 Window系统环境下,在catalina.bat文件第一行添加以下内容 set JAVA_OPTS=-Xms512m -Xmx512 ...

  9. springboot springmvc 抛出全局异常解决方法

    springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了. springmvc统一异常解决方法这里要说明的是.只是结合了springboot的使用而已.直接上 ...

随机推荐

  1. hive 基础

    Apache的顶级项目,(java) 2008年Facebook公司开源给Apache基金会 官网:http://hive.apache.org/ hive 将SQL转换成MapReduce程序,并将 ...

  2. qt 安装包生成2

    使用Qt Installer Framework制作安装包 2018年07月01日 03:45:37 大黄老鼠 阅读数:878 标签: qt更多 个人分类: Qt   版权声明:本文为博主原创文章,未 ...

  3. 关于PChar(@string)的疑惑

    看到一篇博客关于讲Delphi中MOVE的例子,心生疑惑.记录下自己的实验,虽然我也不知道这是啥... program Project1; {$APPTYPE CONSOLE} uses SysUti ...

  4. Linux(5.5版为主)的基本操作命令

    mount  查看挂载目录 cat  ~       查看文件下的内容 touch ~       创建一个文件 一次性性创建几个文件:  touch  /tmp/{1,2,3,4}.txt     ...

  5. 11个简单的Java性能调优技巧,傻瓜都能学会!

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情. ...

  6. react中使用antd遇到的问题

    1.less使用报错 less配置修改一般都是1个修改1个增加 test: /\.(css|less)$/, // 修改 // 增加 { loader: require.resolve('less-l ...

  7. HTML基础【1】:认识 HTML

    什么是HTML ​ HTML其实是 HyperText Markup Language 的缩写,超文本标记语言 HTML的作用 1.首先利用记事本保存了一个标题和两段描述, 然后修改纯文本文件的扩展名 ...

  8. redis编译问题

    在编译redis时,出现以下问题 In file included from adlist.c:34:0: zmalloc.h:50:31: fatal error: jemalloc/jemallo ...

  9. $set()的正确使用方式

    vue给对象新增属性,并触发视图更新 如下代码:给student对象新增age属性 data () { return { student: { name: '', sex: '' } } } 众所周知 ...

  10. JAVA深入研究——Method的Invoke方法(转)

    原文地址:http://www.cnblogs.com/onlywujun/p/3519037.html 在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一 ...