okhttp请求文件异常解决方法

微信借口中获取素材的接口返回只是一个缓存的文件流 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 "";
        }
    }

转载于:https://www.cnblogs.com/dcybook/p/7891876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值