2015-10-30 3 views
2

Я пытался реализовать функциональность, написанную на Java, для загрузки файла через PUT HTTP-запрос.Что такое эквивалент Php для newInputStreamSupplier Java?

Вот мой пример кода 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, что делает PUT вызов, чтобы загрузить файл с помощью CURL, но не может получить ответ:

<?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); 
?> 

я получаю сообщение об ошибке сказав: «Содержимое файла пуст». Кто-нибудь имеет представление о том, что я делаю неправильно?

+0

Вы получаете какую-то ошибку? Или вы просто спрашиваете, что такое поток файлов? Если вы просто спрашиваете, что такое поток файлов, откуда вы взяли код? Кроме того, вы конкретно пытаетесь сделать PUT? Или ПОСТ? Вы не указываете PUT где-нибудь, что я вижу. – Samsquanch

+0

Я получаю сообщение об ошибке: Содержимое файла пуст. Я получил образец Java-кода из приложения, которое может успешно выполнить PUT-вызов. Я должен подражать этому звонку с помощью php. –

+0

Попробуйте http://php.net/manual/ro/function.curl-getinfo.php, чтобы получить дополнительную информацию – Mihai

ответ

1

Ну, я понял решение для моего вопроса. я должен пройти полный путь к файлу в заголовке CURL размер файла:

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

Кроме того, я должен был добавить ниже заголовка CURL для передачи файлов данных в двоичном виде:

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

Решение, упомянутое в this question, помогло мне.

Смежные вопросы