为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 PHP 中解码 Java 流

如何在 PHP 中解码 Java 流

PHP
蝴蝶刀刀 2022-06-11 09:20:44
我请求了沃尔玛报告API,结果将返回zip文件流。参考API文档,它给出了一个用Java代码实现的例子,如下所示:if (response.getStatus() == Response.Status.OK.getStatusCode() && response.hasEntity()) {  InputStream inputStream = (InputStream)response.getEntity();  try {    String header = response.getHeaderString("Content-Disposition");    if(header != null && !("").equals(header)) {      if(header.contains("filename")){        //header value will be something like:        //attachment; filename=10000000354_2016-01-15T23:09:54.438+0000.zip        int length = header.length();        String fileName = header.substring(header.indexOf("filename="),length);        System.out.println("filenameText " + fileName);        String [] str = fileName.split("=");        System.out.println("fileName: " + str[1]);        //replace "/Users/anauti1/Documents/" below with your values        File reportFile = new File("/Users/anauti1/Documents/" + str[1].toString());        OutputStream outStream = new FileOutputStream(reportFile);        byte[] buffer = new byte[8 * 1024];        int bytesRead;        while ((bytesRead = inputStream.read(buffer)) != -1) {          outStream.write(buffer, 0, bytesRead);        }        IOUtils.closeQuietly(inputStream);        IOUtils.closeQuietly(outStream);      }    }  }  catch (Exception ex){    System.out.print("Exception: " + ex.getMessage());  }}它会下载zip文件但文件数据已损坏。这可能是使用Java代码传输字节流之类的原因。这是如何转换字节流的问题。你能帮我吗?顺便说一句,我已将部分流剪切如下:
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

你解决问题了吗?下面的简单代码对我有用


    $fp = fopen('/your path where you store the zip file/'.$filename, 'w+'); 

    if ($fp == FALSE){ 

      print "File not opened<br>"; 

      exit; 

    }

    fwrite($fp, $response);

    fclose($fp);

$response是 API 响应的正文,它将是 $filename从标头中获取的不可读格式的 zip 文件名。


查看完整回答
反对 回复 2022-06-11
?
喵喔喔

TA贡献1735条经验 获得超5个赞

似乎 Json Encoded 并且您必须在 php 脚本中使用 json 对其进行解码,因此: json_decode(string,array) string = 您收集的编码响应。array = True 如果你想要结果数据的数组。


2- 使用 header('Content-Type: application/json') (此标头在发送或接收响应之前最有用)


3 -错误处理:json_last_error() json_last_error_msg()


try {

                        $header = $resultInfo->getHeader('Content-Disposition');

                        if (!empty($header)) {

                            if (strpos($header, 'filename') !== false) {

                                $filename = substr($header, strpos($header, 'filename'));

                                $str = explode('=', $filename);

                                $body = $resultInfo->getBody();

                                $fp = fopen(storage_path("csv/{$str[1]}"), 'w');

                                ##uncomment below line if response not valid may help you.                            

                                # header('Content-Type: application/json');

                                $dbody = json_decode($body,true);

                                fwrite($fp, $dbody);

                                fclose($fp);

                            }

                        }

                    } catch (\Exception $e) {

                        echo $e->getMessage();

                    }

希望能有所帮助


查看完整回答
反对 回复 2022-06-11
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号