繁体   English   中英

PHP 相当于 Java 的 newInputStreamSupplier 吗?

[英]What is Php's equivalent of Java's newInputStreamSupplier?

我一直在尝试实现一个用 Java 编写的功能,用于通过 PUT HTTP 请求上传文件。

这是我的示例 Java 代码:

import com.google.common.io.Files;

public void uploadFile() {
        final makeRestRequest makeUploadRequest = makeRequestTo(upload_file_location)
                .method("PUT")
                .addHeader(new HttpHeader("Accept", "application/json"))
                .addHeader(new HttpHeader("Content-Type", "application/zip"))
                .body(Files.newInputStreamSupplier(new java.io.File("/sample_file.zip")))
                .build();

        final getRestResponse uploadResponse = makeUploadRequest.fetchResponse();
}

我正在寻找类似的 php 代码变体,它可以进行 HTTP PUT 调用以上传文件,但我不确定newInputStreamSupplier使用什么。 这是我的示例 php 代码,它使用 CURL 进行 PUT 调用以上传文件,但无法获得响应:

<?php
$url = upload_file_location; 
$localfile = "sample_file.zip";

$fp = fopen ($localfile, "rb"); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_PUT, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$headers = array();
$headers[] = 'Content-Type: application/zip';
$headers[] = 'Accept: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_INFILE, $fp); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile)); 
$http_result = curl_exec($ch);
?>

我收到一条错误消息:“文件内容为空”。 有没有人知道我做错了什么?

好吧,我为我的问题找到了解决方案。 我应该在 CURL 文件大小标头中传递文件的完整路径:

curl_setopt($ch, CURLOPT_INFILESIZE, filesize(realpath($localfile));

此外,我必须添加以下 CURL 标头以将文件数据作为二进制传输:

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

这个问题中提到的解决方案对我有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM