On 9/17/20 1:08 PM, wjoe wrote:
Every post or example I found copies the file, like your code does, too. Why is that ? The content of the file upload is embedded in the form data. There's no need for temporary files or copying at all.

On top of that, if I upload a file to a server which is on a different PC on a different file system, how am I supposed to read the file from disk on a remote file system ?

This makes no sense.

What I want is something like this:

~$ cat /var/log/temperatures.log

temp_1=22;temp_2=28
temp_1=21;temp_2=25


~$ curl -F "temperature_log=@/var/log/temperatures.log" 192.168.1.1:20222/temperature_upload

~$ nc -l 127.0.0.1 20222

POST /temperature_upload HTTP/1.1
Host: 192.168.1.1:20222
User-Agent: curl/7.72.0
Accept: */*
Content-Length: 245
Content-Type: multipart/form-data; boundary=------------------------c73c71472ff9e7d5

--------------------------c73c71472ff9e7d5
Content-Disposition: form-data; name="temperature_log"; filename="/var/log/temperatures.log"
Content-Type: application/octet-stream

temp_1=22;temp_2=28
temp_1=21;temp_2=25

--------------------------c73c71472ff9e7d5--


void upload(HttpRequest.. req, blah)
{
    auto file = "temperature_log" in req.files;
    if (file) {
       string temp_data_raw = file.data;
      assert ("temp_1=22;temp_2=28\ntemp_1=21;temp_2=25" == temp_data_raw);
    }
}


the `files` property actually does the processing only when you call it.

If you access the `bodyReader` property directly, you can process that data yourself. You can even register a web interface function with an `InputStream` parameter type, and it will be bound to the body data.

I've done this with my REST interface, though that's not form data.

That's not a great API, though. I would love to see vibe.d allow a direct call to vibe.inet.webform.parseFormData with a specific handler for files and form data.

I think you can agree that it's not feasible to store arbitrary sized file contents in memory. But it certainly can provide a mechanism to handle it as it's read.

-Steve

Reply via email to