<span class="Apple-style-span" style="font-family: Times; background-color: rgb(255, 255, 255); font-size: medium; "><pre style="white-space: pre-wrap; ">Thanks very much, that really helped! </pre><pre style="white-space: pre-wrap; ">
> On Mon Oct 3 19:04:22 UTC 2011, Andrew Hammond wrote: 
>
> Hi there,
>
> ><i> upload_set_form_field "${upload_field_name}_name" $upload_file_name;
</i>> ><i> upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
</i>> ><i> upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
</i>> ><i> upload_aggregate_form_field "${upload_field_name}_sha1" $upload_file_sha1;
</i>> ><i> upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
</i>>
> Note that "resumable" can apply to a single file, without any
> $upload_field_name set, so you'll get things like "_name" and
> "_content_type" in your final post content.</pre><pre style="white-space: pre-wrap; ">What would be the right way to get the $upload_field_name populated? Or should I even worry about that? I don't imagine that my usage will care about it (I'm going to be including the module and uploading a single file at a time), however I'd like the library code to not suck too much for the next guy.</pre>
<pre style="white-space: pre-wrap; ">> ><i> I upload to the system using the following (see
</i>> ><i> <a href="https://github.com/SmartReceipt/py_lightweight_uploader">https://github.com/SmartReceipt/py_lightweight_uploader</a>):
</i>>
> One important off-by-one error there:
>
> --- py_lightweight_uploader.py     2011-10-03 23:37:18.000000000 +0100
> +++ py_lightweight_uploader.py     2011-10-03 23:40:24.000000000 +0100
> @@ -188,7 +188,7 @@
>      @property
>      def next_content_range(self):
>          plus_chunk = self.last_byte_uploaded + self.chunk_size - 1
> -        top_bound = plus_chunk if plus_chunk < self.total_file_size else self.total_file_size
> +        top_bound = plus_chunk if plus_chunk < self.total_file_size else self.total_file_size - 1
>          return 'bytes %d-%d/%d' % (self.last_byte_uploaded, top_bound, self.total_file_size)
>  
>     @property
>
> ><i> Please note that despite the error message on line 680, the uploaded file is
</i>> ><i> byte-for-byte identical to the source file. Error message follows:
</i>> ><i> 
</i>> ><i> 2011/10/03 10:58:46 [error] 8111#0: *35 file offset at the end of a part
</i>> ><i> 210000 does not match the end specified range 204796-210000/210000, client:
</i>> ><i> 10.178.51.115, server: <a href="http://account.nutricateonline.com">account.nutricateonline.com</a>, request: "POST
</i>> ><i> /rspool/?a=b&c=d HTTP/1.0", host: "209.114.46.109"
</i>> 
> The range is expected to be 204796-209999/210000, as patched above.
<br></pre><pre style="white-space: pre-wrap; ">Patch applied, thanks! I also updated my UTs to reflect this change (and the 50kb default chunk size).</pre><pre style="white-space: pre-wrap; ">> ><i> I think that having request.FILES empty is correct. The two parameters in
</i>> ><i> the GET dictionary are from the command line (also correct). However I think
</i>> ><i> the upload parameters should be represented somewhere. Can anyone suggest
</i>> ><i> next steps?
</i>>
> They'll be in the POST dictionary when the client is right.
<br></pre><pre style="white-space: pre-wrap; ">Yup, they're there now. Perfect!</pre><pre style="white-space: pre-wrap; ">> Note that you are also double-sending the last byte of each chunk --
> make chunk_size be 1 or 2 and send a small file, and you'll see the
> problem. The receiving side can handle the double-send, so it's an
> inefficiency rather than a protocol error.
</pre><pre style="white-space: pre-wrap; ">I'll root this bug out later, for now it appears to be working end-to-end.</pre><pre style="white-space: pre-wrap; ">> But with 50kB chunks, that last range should really be
> 204800-209999/210000.

> Good luck with it,
>
>    f
> -- 
> Francis Daly        <a href="http://mailman.nginx.org/mailman/listinfo/nginx">francis at daoine.org</a></pre></span>