Hello I'm very new to both Apache and libapreq; I'm struggling to get a C based Apache module working with a multipart/form-data request, which is uploading 2 files.
Given these 2 parts in my request: Content-Disposition: form-data; name="foo"; filename="test_file_1.txt" Content-Type: application/x-thought and Content-Disposition: form-data; name="foo"; filename="test_file_2.txt" Content-Type: application/x-thought Please could someone advise me what string I should place in the second parameter in the call to apreq_body_get() ? I have tried using the actual filename "test_file_1.txt" but I get returned a NULL pointer from apreq_body_get() I've also tried using the string "filename" but this also gives me a NULL pointer. At the end of this email I've appended the full request from my client, and the handler from my Apache module. Thanks in advance for any help or suggestions. Kind regards, Mark. Here is my multipart/form-data request, generated using the libcurl curl_formadd function - please excuse the output, this is from my test harness client (I can't figure out how to get Apache to dump the entire request in it's logs): 12/21/10 21:19:42.402.177 HttpClient.cpp:174 DEBUG - => Send header, 215 bytes (0xd7) 0000: POST /thoughtupload HTTP/1.1 001e: Host: logger1.st3.devel.messagelabs.com 0047: Accept: */* 0054: Content-Length: 402 0069: Expect: 100-continue 007f: Content-Type: multipart/form-data; boundary=-------------------- 00bf: --------8691e9ee9b5b 00d5: 12/21/10 21:19:42.403.968 HttpClient.cpp:174 DEBUG - <= Recv header, 23 bytes (0x17) 0000: HTTP/1.1 100 Continue 12/21/10 21:19:42.404.326 HttpClient.cpp:174 DEBUG - => Send data, 155 bytes (0x9b) 0000: ------------------------------8691e9ee9b5b 002c: Content-Disposition: form-data; name="foo"; filename="test_file_ 006c: 1.txt" 0074: Content-Type: application/x-thought 0099: 12/21/10 21:19:42.404.741 HttpClient.cpp:174 DEBUG - => Send data, 21 bytes (0x15) 0000: This is test file 1.. 12/21/10 21:19:42.405.059 HttpClient.cpp:174 DEBUG - => Send data, 157 bytes (0x9d) 0000: 0002: ------------------------------8691e9ee9b5b 002e: Content-Disposition: form-data; name="foo"; filename="test_file_ 006e: 2.txt" 0076: Content-Type: application/x-thought 009b: 12/21/10 21:19:42.405.488 HttpClient.cpp:174 DEBUG - => Send data, 21 bytes (0x15) 0000: This is test file 2.. 12/21/10 21:19:42.405.740 HttpClient.cpp:174 DEBUG - => Send data, 48 bytes (0x30) 0000: 0002: ------------------------------8691e9ee9b5b-- 12/21/10 21:19:42.444.345 HttpClient.cpp:174 DEBUG - <= Recv header, 17 bytes (0x11) 0000: HTTP/1.1 200 OK The handler in my Apache module is as follows: static int thoughtupload_handler(request_rec *r) { if (strcmp(r->handler, "thoughtupload")) { return DECLINED; } if(strncmp(r->method, "POST", 4) == 0) { apreq_handle_t *req; req = apreq_handle_apache2(r); apr_pool_t *mp = NULL; apr_pool_create(&mp, NULL); ap_log_rerror(APLOG_MARK, APLOG_EMERG, APR_SUCCESS, r, "I have these files: %s", apreq_params_as_string(mp, apreq_params(req, mp), NULL, APREQ_JOIN_AS_IS)); apr_pool_destroy(mp); apreq_param_t *param = apreq_body_get(req, "test_file_1.txt"); if(param == NULL) { ap_log_rerror(APLOG_MARK, APLOG_EMERG, APR_SUCCESS, r, "NO SUCH PARAM"); } else if(param->upload == NULL) { ap_log_rerror(APLOG_MARK, APLOG_EMERG, APR_SUCCESS, r, "NOT UPLOAD"); } else { ap_log_rerror(APLOG_MARK, APLOG_EMERG, APR_SUCCESS, r, "GOT SOME DATA!"); } } return OK; } Using this code, I get the following log output: [Tue Dec 21 21:50:16 2010] [emerg] [client 10.191.84.1] I have these files: test_file_1.txt, test_file_2.txt [Tue Dec 21 21:50:16 2010] [emerg] [client 10.191.84.1] NO SUCH PARAM