matlab.net.http.io.FileConsumer Class
Namespace: matlab.net.http.io
Superclasses: matlab.net.http.io.ContentConsumer
Consumer for files in HTTP messages
Description
The FileConsumer
class provides a convenient way to download a file from a
web service, or to save data received from the web in a file. You can specify the name of the
file, or let MATLAB® determine the name from information sent by the server or file named in the
URI.
The matlab.net.http.io.FileConsumer
class is a handle
class.
Creation
Description
consumer = FileConsumer(
constructs a filename
,permission
,machineformat
,encoding
)FileConsumer
that creates or overwrites a file with the
payload of the response from the server. The parameters have the same meaning as those of
the fopen
function, and all are
optional.
consumer = FileConsumer(
sets the
FID
)FileIdentifier
property to FID
and writes to
that file. FID
must be the
identifier of a file you opened for writing. MATLAB writes to the file at the current position indicator, so if you open an
existing file using 'a+'
permission, for example, MATLAB appends to the file. When transfer is completed, MATLAB leaves the position indicator at the end of the file and does not close the
file.
Input Arguments
filename
— File or folder name
character vector | string scalar
File or folder name, including full path and optional extension, specified as a
character vector or a string scalar. To determine the name of the file that
MATLAB creates, see the Filename
property.
If filename
specifies a file in an existing folder, then MATLAB:
Opens the file using
fopen(filename,permission,...)
.If
permission
is not specified, then opens the file usingfopen(filename,'w+')
.If
filename
does not include an extension, then MATLAB adds one based on the Content-Type and/or Content-Disposition header field in the received message or the extension of the file name in the URI of the request, if any.
If filename
specifies an existing, writable folder, then
MATLAB creates a file in the folder with a name derived from the
Content-Disposition header field in the response or from the URI, possibly adding an
extension based on Content-Type if that name does not contain one.
If filename
is missing or empty, then MATLAB creates a file in the current folder. This is equivalent to
filename
= '.'
. The current folder is the
folder at the time this FileConsumer
was created, not the time this
consumer is used in a send
request.
Example: 'myTextFile.txt'
Data Types: char
| string
permission
— File access type
w+
(default) | u+
| u
| T
| value allowed by fopen
function
File access type, specified as a string. If permission
is
specified, it must allow write access. The default value is 'w+'
,
which opens or creates a file for reading and writing and discards existing contents,
if any.
permission
can be any value allowed by the fopen
function. The following additional values of
permission
are supported:
| Same as For example, if |
| When appended to a permission, behaves similarly to text mode
|
In all cases, for 'w'
and 'w+'
permissions
(or if permission
is not specified), MATLAB does not overwrite an existing file unless the file name is exactly
equal to filename
.
Example: 'a'
'w+T'
Data Types: char
| string
machineformat
— Order for reading or writing bytes or bits
any value allowed by fopen
Order for reading or writing bytes or bits, specified as any value allowed by the
fopen
function.
Data Types: char
| string
encoding
— Character encoding
any value allowed by fopen
Character encoding, specified as any value allowed by the fopen
function.
Data Types: char
| string
Properties
Public Properties
FileIdentifier
— File identifier
double
Identifier of the file (FID) being written, specified as double. If the consumer was constructed with an FID argument, then this property is the identifier. Data is written to the current file position indicator associated with this identifier, so subclasses should be careful not to change the position accidentally when using this identifier. At the conclusion of the transfer, the file remains open and the position remains at the end of the file.
If the constructor was called with a filename
argument, or
with no arguments, then this property is the read-only file identifier for that file.
This allows subclasses to read the file during transfer without disturbing the
position indicator used for writing. At the conclusion of the transfer, this
identifier is closed.
Attributes:
GetAccess | public |
SetAccess | private |
Filename
— File path name
string.empty
(default) | string
Full path name of the file being written, specified as a string. If the consumer
was constructed with an FID argument, then this property is the name of the file.
Otherwise, this value might not be set until MATLAB has begun writing to the file during receipt of a response message,
since the file name cannot necessarily be determined until all headers have been
received. Use this property to determine the file that was written.
Filename
is also stored in the
Response.Body.Data
property.
Attributes:
GetAccess | public |
SetAccess | private |
AllocationLength
— Suggested buffer size
uint64
Suggested buffer size, specified as uint64
. MATLAB sets AllocationLength
to the anticipated size of
buffers of data passed to putData
.
The actual size might be smaller or larger. To improve performance, the consumer can use
this value to preallocate space to handle the data.
MATLAB sets this property before calling the start
method for the convenience of subclasses.
Attributes:
GetAccess | public |
SetAccess | public |
ContentLength
— Expected length of payload
uint64
| empty
Expected length of the payload, specified as uint64
. The property
normally is the Value
property of the matlab.net.http.field.ContentLengthField
in the Header
property.
If ContentLength
is empty, then the length is not known. The
payload ends when putData(uint8.empty)
is called.
MATLAB sets this property before calling initialize
,
for the convenience of subclasses that might benefit from knowing the length of the
data.
If this ContentConsumer
is a delegate of a top-level consumer, then the
value of ContentLength
might be different from the
ContentLength
value of the top-level consumer.
Example: numel(someData)
where someData
is type
uint8
Attributes:
GetAccess | public |
SetAccess | public |
ContentType
— Media type of payload
matlab.net.http.MediaType
| empty
Media type of payload, specified as a matlab.net.http.MediaType
object. The
property normally is the Value
property of the matlab.net.http.field.ContentTypeField
in the Header
property. If the ContentType
property is empty, then the ContentTypeField
is empty or
nonexistent.
MATLAB sets this property before calling initialize
for the convenience of subclasses that might want to examine the
MediaType
. Subclasses can set this property if they determine from
the data that it is of a different MediaType
.
At the end of the transfer, MATLAB copies this value into the Response.Body.ContentType
property.
Example: 'application/octet-stream'
Attributes:
GetAccess | public |
SetAccess | public |
Header
— Header of payload currently being processed
matlab.net.http.HeaderField
Header of the payload currently being processed, specified as a matlab.net.http.HeaderField
object.
Consumers use this header to determine how to process the payload that is being sent
to them. For a top-level consumer, this value is the same as
Response.Header
. For a delegate, the value might be different.
For example, in a multipart message processed by a MultipartConsumer
, it
is the header of the part that this delegate is processing. The delegate can still
examine Response.Header
for headers of the original message.
MATLAB sets this property before calling initialize
,
for the convenience of subclasses.
Attributes:
GetAccess | public |
SetAccess | public |
Request
— Completed RequestMessage
that was sent
matlab.net.http.RequestMessage
The completed RequestMessage
that was sent, specified as a matlab.net.http.RequestMessage
object. This is the final RequestMessage
after all redirections, which is the completedrequest
return value from the send
method.
MATLAB sets this property before calling initialize
, for the convenience of subclasses.
Attributes:
GetAccess | public |
SetAccess | public |
Response
— ResponseMessage
being processed
matlab.net.http.ResponseMessage
The ResponseMessage
being processed, specified as a matlab.net.http.ResponseMessage
object.
MATLAB sets the Response
property before calling initialize
.
The value is the ResponseMessage
after headers have been received but
before receiving any payload. At the start of the response message processing (or the
start of a part for multipart messages), the ResponseMesssage.Body
property is a MessageBody
object with empty
Data
and Payload
properties. To store
received data, consumers can modify the Response
and
MessageBody.Data
properties during data transfer. Usually,
consumers that process and then store data set Response.Body.Data
to their processed payload, though this is not required. At the completion of the
transfer, MATLAB returns this Response
to the caller of send
. Consumers
should not modify other Response
properties, such as
Header
or StatusLine
, as those changes are
returned to the caller of send
.
The Response.Body.Payload
property is empty during the transfer
and consumers should not attempt to modify it. If the HTTPOptions.SavePayload
property is
set, then MATLAB sets Payload
to the received payload at the end of
the transfer of the message or the part (after the call to
putData(uint8.empty)
) or when an exception occurs.
If an exception occurs in the consumer during message processing, then MATLAB throws an HTTPException
object. The
History
property contains this Response
value.
If the consumer is a delegate that is processing part of a multipart message, then
Response.Header
contains the header of the whole message, and
the Payload
and Data
properties of
Response.Body
are cleared before invoking the
ContentConsumer
for each part. At the conclusion of each part, a new
ResponseMessage
is added to the end of the array of
ResponseMessage
objects in the original response's
Body.Data
containing the Header
from this
object and the Body
from this property. The next delegate sees a
fresh Response
with an empty MessageBody
, not the
previous delegate's MessageBody
.
Attributes:
GetAccess | public |
SetAccess | public |
Dependent | true |
URI
— Destination of request being processed
matlab.net.URI
Destination of the request being processed, specified as a matlab.net.URI
object. This value is the original destination URI as determined by send
. It is not the URI of a proxy or the final URI after redirections.
MATLAB sets this property before calling initialize
, for the convenience of subclasses.
Attributes:
GetAccess | public |
SetAccess | public |
Protected Properties
AppendFcn
— Function called by putData
to append additional data
function handle
Function, specified as a function handle, called by the putData
method to append additional data. The putData
method in this class
calls the AppendFcn
function to append data it receives in its
data
argument to existing data in the response message. The
function must have the signature:
AppendFcn(consumer,newdata)
where newdata
is the data to be appended to the array at
consumer.Response.Body.Data
. It is the responsibility of this
method to update consumer.CurrentLength
to reflect the new length
of Data
. If newdata
is empty, which indicates
the end of the stream, then the function should update
Response.Body.Data
to its final value.
The default behavior, if this property is empty, uses an internal function that treats
Data
as an array of arbitrary values supporting the
horzcat
function. It efficiently adds
newdata
by preallocating space, maintaining
CurrentLength
to be the actual length of data stored. At the
end of the message, it truncates Response.Body.Data
to
CurrentLength
.
Subclasses can change this property if horzcat
is not appropriate
for the append process. For example, when a StringConsumer
builds a
scalar string, it would add to the string using the plus
function
instead of horzcat
.
Subclasses that do not invoke ContentConsumer.putData
to append data,
or which are satisfied with horzcat
behavior when appending data,
can ignore this property.
Example: @customAppend
where @customAppend
is
defined by the consumer
Attributes:
GetAccess | protected |
SetAccess | protected |
CurrentDelegate
— ContentConsumer
to which this consumer is delegating
matlab.net.http.io.ContentConsumer
| []
The ContentConsumer
to which this consumer is delegating,
specified as a matlab.net.http.io.ContentConsumer
object. The
delegateTo
method of the calling consumer (the delegator)
sets the CurrentDelegate
property. If there is no current delegation, then
the value is []
.
MATLAB sets CurrentDelegate
to
[]
before calling
initialize
.
Attributes:
GetAccess | protected |
SetAccess | protected |
CurrentLength
— Length of data currently in Response.Body.Data
uint64.empty
(default) | uint64
Length of data currently in the Response.Body.Data
property,
specified as uint64
.
This property is used when Response.Body.Data
has been
preallocated to a size larger than the actual amount of data currently stored, to
indicate the length of that stored data. If this property is empty, then it means that
all of Response.Body.Data
contains the stored data or that a
ContentConsumer
subclass is disposing of the data in some way other
than storing it in Response.Body.Data
.
This property is used and set by the putData
method in this base class when the AppendFcn
property is empty. It
is for the benefit of subclasses that call putData
and want to examine
already-stored data, and/or any implementations of AppendFcn
that
maintain results in Response.Body.Data
.
Subclasses that use putData
also can modify this property to reset
the position in the buffer where the data is stored. For example, when the default
AppendFcn
function is used, a subclass that processes all of
Response.Body.Data
on each call to putData
might no longer have a use for the original data, so it can reset the
CurrentLength
property to 1 so that the next
putData
call overwrites the buffer with new data. There is no need
to clear elements in the buffer past the end of the new data.
Subclasses that do not call putData
can use this property to track
their own data, or can leave it unset (empty). MATLAB does not place any constraints on the value that can be set here
and does not use it for any purpose other than to determine where the default
AppendFcn
should store the next buffer of data, and where to
truncate the data at the end of the message. Set this property to empty before the final
call to putData(uint8.empty)
to prevent truncation of the data.
MATLAB sets this property to empty before each call to initialize
.
Attributes:
GetAccess | protected |
SetAccess | protected |
MyDelegator
— ContentConsumer
that delegated to this consumer
matlab.net.http.io.ContentConsumer
| empty
The ContentConsumer
that delegated to this consumer, specified as a
matlab.net.http.io.ContentConsumer
object. If this consumer is a
delegate that was invoked by another consumer, such as a GenericConsumer
or MultipartConsumer
, then this is the calling consumer. It is empty in a
top-level consumer specified in the call to send
.
Delegates can use this property to access properties of their delegators, for example, to determine which consumer delegated to them.
Attributes:
GetAccess | protected |
SetAccess | protected |
Methods
Public Methods
initialize | Prepare consumer for new HTTP payload |
start | Start transfer of file to FileConsumer |
putData | Save next buffer of data to file for FileConsumer |
delegateTo | Delegate to another consumer |
More About
Class Hierarchy
Version History
Introduced in R2018a
See Also
ContentConsumer
| RequestMessage
| ResponseMessage
| ContentTypeField
| FileProvider
| fopen
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)