Tôi muốn tải tệp từ một URL bên ngoài trực tiếp lên thùng chứa Amazon S3 bằng cách sử dụng PHP SDK. Tôi cố gắng làm điều này với đoạn mã sau:Tải tệp bên ngoài lên thùng AWS S3 bằng cách sử dụng PHP SDK
$s3 = new AmazonS3();
$response = $s3->create_object($bucket, $destination, array(
'fileUpload' => $source,
'length' => remote_filesize($source),
'contentType' => 'image/jpeg'
));
Trường hợp chức năng remote_filesize như sau:
function remote_filesize($url) {
ob_start();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$ok = curl_exec($ch);
curl_close($ch);
$head = ob_get_contents();
ob_end_clean();
$regex = '/Content-Length:\s([0-9].+?)\s/';
$count = preg_match($regex, $head, $matches);
return isset($matches[1]) ? $matches[1] : "unknown";
}
Tuy nhiên, nó sẽ được tốt đẹp nếu tôi có thể bỏ qua việc thiết lập kích cỡ khi tải lên đến Amazon từ điều này sẽ giúp tôi tiết kiệm một chuyến đi đến máy chủ của riêng tôi. Nhưng nếu tôi xóa cài đặt thuộc tính 'length' trong hàm $ s3-> create_object, tôi nhận được thông báo lỗi 'Không thể xác định kích thước luồng cho tải lên trực tuyến'. Bất kỳ ý tưởng làm thế nào để giải quyết vấn đề này?
Tôi không có quyền kiểm soát máy chủ/máy chủ từ xa. Tôi đã thử phương pháp được đề xuất, nhưng mặc dù nó chỉ yêu cầu tiêu đề, nó làm chậm đáng kể quá trình. Tôi cũng đã quyết định di chuyển máy chủ của mình sang Amazon (trong cùng vùng có sẵn như nhóm), và bây giờ nó đã tăng tốc. – Bjorn