乐鑫技术交流
直播中

陈利妮

7年用户 1029经验值
私信 关注
[问答]

使用esp_http_client向file_server上传文件,上报时报错的原因?

我使用的IDF-4.4.2,使用file_server例程作为http server服务器。然后使用esp_http_client向file_server上传文件,使用的POST上传文件,上报时,报了一个405的警告。Code: Select all
I (865851) esp_netif_lwip: DHCP server assigned IP to a station, IP is: 192.168.4.3W (867401) wifi:idx:3 (ifx:1, 30:c6:f7:23:bd:2c), tid:0, ssn:0, winSize:64I (867471) file_server: Sending file : /config.ini (206 bytes)...I (867471) file_server: File sending completeI (868061) file_server: Receiving file : /text.log...I (868061) file_server: Remaining size : 19I (868081) file_server: File reception completeW (868361) httpd_uri: httpd_uri: Method '3' not allowed for URI '/'W (868361) httpd_txrx: httpd_resp_send_err: 405 Method Not Allowed - Request method for this URI is not handled by server
file_server例程中配置了POST的方法,还出现了警告,应该怎么解决?Code: Select all
    /* URI handler for uploading files to server */    httpd_uri_t file_upload = {        .uri       = "/upload/*",   // Match all URIs of type /upload/path/to/file        .method    = HTTP_POST,        .handler   = upload_post_handler,        .user_ctx  = server_data    // Pass server data as context    };    httpd_register_uri_handler(server, &file_upload);

esp_http_client端就用了GET和POST两种Code: Select all
char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER] = {0};    /**     * NOTE: All the configuration parameters for http_client must be spefied either in URL or as host and path parameters.     * If host and path parameters are not set, query parameter will be ignored. In such cases,     * query parameter should be specified in URL.     *     * If URL as well as host and path parameters are specified, values of host and path will be considered.     */    esp_http_client_config_t config = {        // .host = "httpbin.org",        // .path = "/get",        // .query = "esp",        .url = "http://192.168.4.1/config.ini",        .event_handler = _http_event_handler,        .user_data = local_response_buffer,        // Pass address of local buffer to get response        //.disable_auto_redirect = true,    };    esp_http_client_handle_t client = esp_http_client_init(&config);    // GET    esp_err_t err = esp_http_client_perform(client);    if (err == ESP_OK) {        ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %d",                esp_http_client_get_status_code(client),                esp_http_client_get_content_length(client));    } else {        ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));    }    ESP_LOG_BUFFER_HEX(TAG, local_response_buffer, strlen(local_response_buffer));    // POST    const char *post_data = "{"field1":"value1"}";    esp_http_client_set_url(client, "http://192.168.4.1/upload/text.log");    esp_http_client_set_method(client, HTTP_METHOD_POST);    esp_http_client_set_header(client, "Content-Type", "application/json");    esp_http_client_set_post_field(client, post_data, strlen(post_data));    err = esp_http_client_perform(client);    if (err == ESP_OK) {        ESP_LOGI(TAG, "HTTP POST Status = %d, content_length = %d",                esp_http_client_get_status_code(client),                esp_http_client_get_content_length(client));    } else {        ESP_LOGE(TAG, "HTTP POST request failed: %s", esp_err_to_name(err));    }

回帖(1)

李涛

2024-6-14 17:14:40
根据您提供的信息,您在使用ESP-IDF 4.4.2和file_server例程作为HTTP服务器,使用esp_http_client向file_server上传文件。在上报时,您遇到了一个405错误。以下是一些可能的原因和解决方案:

1. **方法不允许**:HTTP 405错误表示服务器理解了请求,但是拒绝执行它。如果您尝试使用POST方法上传文件,但服务器不支持POST方法,就会出现这个错误。请检查您的file_server例程是否支持POST方法。

2. **请求头问题**:确保您的请求头正确设置了Content-Type和其他必要的字段。例如,如果您正在上传一个文本文件,请求头应该包含`Content-Type: text/plain`。

3. **文件路径或名称问题**:检查您在请求中使用的文件路径和名称是否正确。如果服务器上的文件路径或名称与请求中的不匹配,可能会导致错误。

4. **服务器配置问题**:检查您的file_server例程配置,确保它允许上传文件。可能需要修改服务器的配置文件或代码以支持文件上传。

5. **网络问题**:检查您的设备是否正确连接到网络,并确保服务器和客户端之间的通信没有问题。

6. **代码问题**:检查您的esp_http_client代码,确保您正确地设置了请求参数,例如URL、方法(POST)、文件数据等。

为了解决这个问题,您可以尝试以下步骤:

1. 确认file_server例程支持POST方法上传文件。
2. 检查您的请求头,确保Content-Type和其他必要字段正确设置。
3. 检查文件路径和名称是否正确。
4. 检查服务器配置,确保允许文件上传。
5. 检查网络连接和通信。
6. 检查您的esp_http_client代码,确保正确设置请求参数。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分