#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "esp_http_client.h"
#include "esp_event_loop.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "app_wifi.h"
static const char *TAG = "HTTP_CLIENT";
EventGroupHandle_t wifi_event_group;
const int CONNECTED_BIT = BIT0;
esp_err_t _http_event_handler(esp_http_client_event_t *evt) {
switch (evt->event_id) {
case HTTP_EVENT_ERROR:
ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
break;
case HTTP_EVENT_ON_CONNECTED:
ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");
break;
case HTTP_EVENT_HEADER_SENT:
ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
break;
case HTTP_EVENT_ON_HEADER:
ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key,
evt->header_value);
break;
case HTTP_EVENT_ON_DATA:
ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
if (!esp_http_client_is_chunked_response(evt->client)) {
// Write out data
printf("\r\n====收到的数据==%s=====\r\n", (char*) evt->data);
}
break;
case HTTP_EVENT_ON_FINISH:
ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");
break;
case HTTP_EVENT_DISCONNECTED:
ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED");
break;
}
return ESP_OK;
}
void app_wifi_wait_connected() {
xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true,
portMAX_DELAY);
}
static void http_rest() {
esp_http_client_config_t config =
{
.url =
"http://192.168.2.188:7803/web-api/file/getFileSize?fileName=ESP8266Flasher.exe", };
esp_http_client_handle_t client = esp_http_client_init(&config);
esp_err_t err = esp_http_client_perform(client);
if (err == ESP_OK) {
int content_length = esp_http_client_get_content_length(client);
char readData[content_length];
ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %d",
esp_http_client_get_status_code(client), content_length);
esp_http_client_read(client, readData, content_length);
printf("\r\n====收到的数据==%s=====\r\n", readData);
} else {
ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
}
}
static void http_test_task(void *pvParameters) {
app_wifi_wait_connected();
ESP_LOGI(TAG, "Connected to AP, begin http example");
http_rest();
vTaskDelete(NULL);
}
static esp_err_t event_handler(void *ctx, system_event_t *event) {
switch (event->event_id) {
case SYSTEM_EVENT_STA_START:
esp_wifi_connect();
break;
case SYSTEM_EVENT_STA_GOT_IP:
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
/* This is a workaround as ESP32 WiFi libs don't currently
auto-reassociate. */
esp_wifi_connect();
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
break;
default:
break;
}
return ESP_OK;
}
void app_wifi_initialise(void) {
tcpip_adapter_init(); //tcp协议初始化
wifi_event_group = xEventGroupCreate(); //创建一个事件组
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); //wifi 事件
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT()
;
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
wifi_config_t wifi_config = { .sta = { .ssid = "jack", .password =
"jack.12306", //设置要连接的wifi
}, };
ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...",
wifi_config.sta.ssid);
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); //设置模式
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));//设置连接wifi的参数
ESP_ERROR_CHECK(esp_wifi_start()); //启动wifi
}
void app_main() {
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
app_wifi_initialise(); //wifi连接部分
xTaskCreate(&http_test_task, "http_test_task", 8192 * 2, NULL, 5, NULL); //创建HTTP任务
}
java后台
@Value("${download-file.path}")
private String path;
@RequestMapping(value = "/getFileSize")
public void getFileSize(HttpServletResponse response, String fileName) throws IOException {
log.error("=======getFileSize=======" + fileName);
BaseResult<Long> result = new BaseResult();
long fileSize = MSCommonUtils.getFileSize(path + "/" + fileName);
result.setData(fileSize);
ServletOutputStream os = response.getOutputStream();
os.write(JSONObject.toJSONString(result).trim().getBytes("gbk"));
}