本文共 1933 字,大约阅读时间需要 6 分钟。
static FILE* _CreateTmpFile(const char* pFileName){ char sFilePathName[256] = { 0 }; sprintf(sFilePathName, "%s%s", UPLOAD_FILES_PATH, pFileName); if (0 == access(sFilePathName, F_OK)) { remove(sFilePathName); } printf("=============create upload file name:%s\n", sFilePathName); return fopen(sFilePathName, "ab");}void HttpServer::OnHttpEvent(mg_connection *connection, int event_type, void *event_data){ http_message *http_req = (http_message *)event_data; struct file_writer_data *data = (struct file_writer_data *) connection->user_data; struct mg_http_multipart_part *mp = (struct mg_http_multipart_part *) event_data; switch (event_type) { case MG_EV_HTTP_REQUEST: HandleEvent(connection, http_req); break; case MG_EV_HTTP_PART_BEGIN: if (NULL == data) { data = new struct file_writer_data; } //创建文件 data->fp = _CreateTmpFile(mp->file_name); if (NULL == data->fp) { mg_printf(connection, "%s", "HTTP/1.1 500 Failed to open a file\r\n" "Content-Length: 0\r\n\r\n"); connection->flags |= MG_F_SEND_AND_CLOSE; delete data; return; } //初始化文件长度为0 data->bytes_written = 0; connection->user_data = (void*)data; break; case MG_EV_HTTP_PART_DATA: if (fwrite(mp->data.p, 1, mp->data.len, data->fp) != mp->data.len) { mg_printf(connection, "%s", "HTTP/1.1 500 Failed to write to a file\r\n" "Content-Length: 0\r\n\r\n"); connection->flags |= MG_F_SEND_AND_CLOSE; return; } data->bytes_written += mp->data.len; break; case MG_EV_HTTP_PART_END: printf("=============upload MG_EV_HTTP_PART_END \n"); mg_printf(connection, "HTTP/1.1 200 OK\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n\r\n" "Written %ld of POST data to a temp file\n\n", (long)ftell(data->fp)); connection->flags |= MG_F_SEND_AND_CLOSE; fclose(data->fp); delete data; data = NULL; connection->user_data = NULL; break; default: break; }}
./curl --form "fileupload=@1.lpg" http://10.0.192.87/tmp/
转载地址:http://ipbxi.baihongyu.com/