Hướng dẫn upload image using curl php - tải lên hình ảnh bằng curl php

Đó là tầm thường để có được hình ảnh từ máy chủ nhưng tôi nghĩ về một cái gì đó khác biệt. Đó là câu hỏi điên rồ nhưng ... có thể gửi tệp (hình ảnh) đến máy chủ nhưng không sử dụng kết nối tải lên biểu mẫu hoặc kết nối FTP không? Tôi muốn gửi một yêu cầu đến ví dụ. http://www.example.com/file.php với nội dung nhị phân. Tôi nghĩ rằng tôi cần đặt hình ảnh tiêu đề loại nội dung/jpeg nhưng làm thế nào để thêm một số nội dung vào yêu cầu của tôi?

Hỏi ngày 8 tháng 8 năm 2010 lúc 8:02Aug 8, 2010 at 8:02

Hướng dẫn upload image using curl php - tải lên hình ảnh bằng curl php

Có nhiều cách để sử dụng Curl để tải lên các tệp hình ảnh, ví dụ:

$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/path/to/image.jpeg');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
//CURLOPT_SAFE_UPLOAD defaulted to true in 5.6.0
//So next line is required as of php >= 5.6.0
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);

Bạn có thể kiểm tra các ví dụ tại: http://au.php.net/manual/en/function.curl-setopt.php

Hướng dẫn upload image using curl php - tải lên hình ảnh bằng curl php

Muglio

2.04816 Huy hiệu bạc18 Huy hiệu đồng16 silver badges18 bronze badges

Đã trả lời ngày 8 tháng 8 năm 2010 lúc 8:16Aug 8, 2010 at 8:16

Andy Linandy LinAndy Lin

5452 Huy hiệu bạc4 Huy hiệu đồng2 silver badges4 bronze badges

4

Xem http://docs.php.net/function.curl-setopt:

Curlopt_postfields dữ liệu đầy đủ để đăng trong thao tác "bài" HTTP. Để đăng một tập tin, hãy trả một tên tệp với @ và sử dụng đường dẫn đầy đủ. Điều này có thể được truyền dưới dạng chuỗi urlencoded như 'para1 = val1¶2 = val2 & ...' hoặc dưới dạng một mảng có tên trường là khóa và dữ liệu trường là giá trị. Nếu giá trị là một mảng, tiêu đề loại nội dung sẽ được đặt thành nhiều dữ liệu/hình thức. The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like 'para1=val1¶2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.

Đã trả lời ngày 8 tháng 8 năm 2010 lúc 8:16Aug 8, 2010 at 8:16

Andy Linandy LinVolkerK

5452 Huy hiệu bạc4 Huy hiệu đồng20 gold badges162 silver badges225 bronze badges

Xem http://docs.php.net/function.curl-setopt:PHP 7.0

$file = new \CURLFile('@/path/to/image.jpeg'); //<-- Path could be relative
$data = array('name' => 'Foo', 'file' => $file);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
//CURLOPT_SAFE_UPLOAD defaulted to true in 5.6.0
//So next line is required as of php >= 5.6.0
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);

Curlopt_postfields dữ liệu đầy đủ để đăng trong thao tác "bài" HTTP. Để đăng một tập tin, hãy trả một tên tệp với @ và sử dụng đường dẫn đầy đủ. Điều này có thể được truyền dưới dạng chuỗi urlencoded như 'para1 = val1¶2 = val2 & ...' hoặc dưới dạng một mảng có tên trường là khóa và dữ liệu trường là giá trị. Nếu giá trị là một mảng, tiêu đề loại nội dung sẽ được đặt thành nhiều dữ liệu/hình thức.

VolkerkvolkerkJun 21, 2018 at 14:31

Hướng dẫn upload image using curl php - tải lên hình ảnh bằng curl php

94.5K20 Huy hiệu vàng162 Huy hiệu bạc225 Huy hiệu ĐồngHusam

Mã duy nhất làm việc cho tôi với Php 7.03 gold badges37 silver badges43 bronze badges

1

Cảm ơn @andylin vì câu trả lời của anh ấy và nguồn này.

function makeCurlFile($file){
    $mime = mime_content_type($file);
    $info = pathinfo($file);
    $name = $info['basename'];
    $output = new CURLFile($file, $mime, $name);
    return $output;
}

Đã trả lời ngày 21 tháng 6 năm 2018 lúc 14:31

$ch = curl_init("https://api.example.com");
$mp3 =makeCurlFile($audio);
$photo = makeCurlFile($picture);
$data = array('mp3' => $mp3, 'picture' => $photo, 'name' => 'My latest single', 
'description' => 'Check out my newest song');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if (curl_errno($ch)) {
   $result = curl_error($ch);
}
curl_close ($ch);

Husamhusam

7.6793 Huy hiệu vàng37 Huy hiệu bạc43 Huy hiệu đồngSep 18, 2020 at 14:59

Phương pháp được sử dụng bởi Andy Lin không hoạt động cho tôi vì một số lý do vì vậy tôi đã tìm thấy phương pháp này:hotroad

Bạn có thể gửi các nội dung khác, không chỉ các tệp bằng cách liên kết giá trị với một khóa bên trong tải trọng dữ liệu $ như được hiển thị bên dưới:1 silver badge8 bronze badges

1

Tôi đang nghĩ rằng điều này là do thực tế là một số API không hỗ trợ cách làm cũ vì lý do bảo mật.

$ch = curl_init();

$cfile = new CURLFile($_FILES['resume']['tmp_name'], $_FILES['resume']['type'], $_FILES['resume']['name']);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $cfile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

Đã trả lời ngày 18 tháng 9 năm 2020 lúc 14:59Feb 11, 2021 at 13:53

Hướng dẫn upload image using curl php - tải lên hình ảnh bằng curl php

HotroadHotroadEgor

811 Huy hiệu bạc8 Huy hiệu đồng2 bronze badges

Tôi đã sử dụng phương pháp gửi ảnh này từ biểu mẫu HTML

$post['file'] = "@FILE_Path"

Đã trả lời ngày 11 tháng 2 năm 2021 lúc 13:53

EgoregorAug 8, 2010 at 8:18

Phù hiệu bằng đồng 212Shubham

Volkerk hoàn toàn đúng nhưng kinh nghiệm của tôi cho thấy rằng việc gửi một toán tử "@" sẽ chỉ hoạt động với các mảng.18 gold badges61 silver badges87 bronze badges

1