curl -F profile=@portrait.jpg https://example.com/upload.cgi
To read content from stdin instead of a file, use - as the filename. This goes
-for both @ and < constructs. Unfortunately it does not support reading the
-file from a named pipe or similar, as it needs the full size before the
-transfer starts.
+for both @ and < constructs. For this case, as well as for others in which the
+full data size cannot be determined before the transfer starts (as named pipes
+or similar), data is transferred as chunks by HTTP and rejected by IMAP.
You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to:
See example below.
.SH AVAILABILITY
Deprecated in 7.56.0. Before this release, field names were allowed to
-contain zero-valued bytes.
+contain zero-valued bytes. The pseudo-filename "-" to read stdin is
+discouraged although still supported, but data is not read before being
+actually sent: the effective data size can then not be automatically
+determined, resulting in a chunked encoding transfer.
.SH RETURN VALUE
0 means everything was ok, non-zero means an error occurred corresponding
to a CURL_FORMADD_* constant defined in
\fIpart\fP is the part's to assign contents to.
\fIfilename\fP points to the nul-terminated file's path name. The pointer can
-be NULL to detach previous part contents settings. Filename storage can be
+be NULL to detach the previous part contents settings. Filename storage can be
safely be reused after this call.
As a side effect, the part's remote file name is set to the base name of the
manner to allow huge files to get transfered without using much memory. It
therefore requires that the file is kept intact during the entire request.
+If the file size cannot be determined before actually reading it (such as for
+a device or named pipe), the whole mime structure containing the part
+will be transferred as chunks by HTTP and rejected by IMAP.
+
Setting a part's contents twice is valid: only the value set by the last call
is retained.
.SH AVAILABILITY