使用curl往服务器推送图片
测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <stdbool.h>
char *upload_url = "http://192.168.10.111:5071/api/device/upload_img";
bool SendImage(char *upload_url, char *send_path) {
CURL *curl;
CURLcode res = CURLE_COULDNT_CONNECT;
struct curl_httppost *form = NULL;
struct curl_httppost *lastptr = NULL;
curl = curl_easy_init();
if (curl) {
// 打开要上传的文件
FILE *upload_file = fopen(send_path, "rb");
if (!upload_file) {
perror("Error opening file");
curl_easy_cleanup(curl);
return false;
}
// 设置POST请求和文件上传参数
curl_easy_setopt(curl, CURLOPT_URL, upload_url);
curl_formadd(&form, &lastptr,
CURLFORM_COPYNAME, "file", // 字段名与C#接口参数名一致
CURLFORM_FILE, send_path, // 文件路径
CURLFORM_CONTENTTYPE, "image/jpeg", // 明确指定文件类型
CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, form);
// 关键修改:设置Content-Type为multipart/form-data
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: multipart/form-data");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 60L);
// 执行请求
res = curl_easy_perform(curl);
// 清理资源
curl_formfree(form);
fclose(upload_file);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
return false;
}
return true;
}
int main() {
if (SendImage(upload_url, "stream_chn1_0.jpg")) {
printf("File uploaded successfully.\n");
} else {
printf("File upload failed.\n");
}
return 0;
}
编译
gcc main.c -o a -lcurl