Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Php';s相当于Java';谁是新的输入流供应商?_Php_File_Curl_Put - Fatal编程技术网

什么是Php';s相当于Java';谁是新的输入流供应商?

什么是Php';s相当于Java';谁是新的输入流供应商?,php,file,curl,put,Php,File,Curl,Put,我一直在尝试实现一个用Java编写的功能,通过PUT HTTP请求上传文件 以下是我的示例Java代码: import com.google.common.io.Files; public void uploadFile() { final makeRestRequest makeUploadRequest = makeRequestTo(upload_file_location) .method("PUT") .

我一直在尝试实现一个用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 filesize头中传递文件的完整路径:

curl\u setopt($ch,CURLOPT\u infiresize,filesize(realpath($localfile));

此外,我还必须添加以下CURL头以二进制形式传输文件数据:

curl\u setopt($ch,CURLOPT\u binarytranfer,1);


中提到的解决方案对我很有帮助。

您是否遇到了某种错误?或者您只是问文件流是什么?如果您只是问文件流是什么,代码是从哪里来的?另外,您是否专门尝试执行PUT?或POST?您没有指定我可以看到的任何位置。我得到的错误是:文件CContent为空。我从一个能够成功进行PUT调用的应用程序中获得了示例java代码。我应该用php模拟该调用。尝试获取更多信息检查
fopen()的返回值
。尝试提供输入文件的完整路径。错误与哪一行代码相关?远程服务器看到了什么?如果无法获取该信息,能否更改URL并在本地服务器上进行测试?