httpd-apreq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joe Schaefer <joe+gm...@sunstarsys.com>
Subject Re: File upload
Date Fri, 24 Feb 2006 14:08:14 GMT
Franky Braem <f.braem@skynet.be> writes:

> Is there a step by step tutorial on how to implement a file upload in
> an Apache module with apreq2? I'm trying to write mod_wxjs (JavaScript
> and wxWidgets as server side script, more info on
> wxjs.sourceforge.net) and I want to add a file upload functionality
> (something like php). 
>
>

Something like this:

  #include "httpd.h"
  #include "apreq_module.h"
  #include "apreq_param.h"
  #include "apreq_module_apache2.h"
  #include "apreq_util.h"

  apreq_handle_t *req;
  apreq_param_t *param;
  request_rec *r;

  ... initialize r ...

  req = apreq_handle_apache2(r);

  param = apreq_body_get(req, "name of upload widget");

  if (param == NULL) {
     /* error: missing field */
  }
  else if (param->upload == NULL) {
     /* error: widget not an upload */
  }
  else {

     /* have upload field */

     apr_table_t *info;      /* upload headers */
     apr_bucket_brigade *bb; /* upload contents */
     apr_bucket_t *e;

     info = param->info;
     /* DO SOMETHING with info */

     bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
     apreq_brigade_copy(bb, param->upload);

     while ((e = APR_BRIGADE_FIRST(bb)) != APR_BRIGADE_SENTINEL(bb)) {
         apr_size_t dlen;
         const char *data;
         apr_status_t s;
         
         /* apr_bucket_read() has side effects on spool buckets, which
          * is why we read from a copy of the brigade - to conserve memory
          */
         s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);

         if (s != APR_SUCCESS) {
             /* error: bad bucket read */
             break;
         }
         else {
             /* DO SOMETHING with data, dlen */
         }

         apr_bucket_delete(e);
     }

  }


-- 
Joe Schaefer


Mime
View raw message