public async Task<BoxFile> UploadAsync(BoxFileRequest fileRequest, Stream stream, List<string> fields = null,
TimeSpan? timeout = null, byte[] contentMD5 = null,
bool setStreamPositionToZero = true,
Uri uploadUri = null)
{
stream.ThrowIfNull("stream");
fileRequest.ThrowIfNull("fileRequest")
.Name.ThrowIfNullOrWhiteSpace("filedRequest.Name");
fileRequest.Parent.ThrowIfNull("fileRequest.Parent")
.Id.ThrowIfNullOrWhiteSpace("fileRequest.Parent.Id");
if (setStreamPositionToZero)
stream.Position = 0;
uploadUri = uploadUri == null ? _config.FilesUploadEndpointUri : uploadUri;
BoxMultiPartRequest request = new BoxMultiPartRequest(uploadUri) { Timeout = timeout }
.Param(ParamFields, fields)
.FormPart(new BoxStringFormPart()
{
Name = "attributes",
Value = _converter.Serialize(fileRequest)
})
.FormPart(new BoxFileFormPart()
{
Name = "file",
Value = stream,
FileName = fileRequest.Name
});
if (contentMD5 != null)
request.Header(Constants.RequestParameters.ContentMD5, HexStringFromBytes(contentMD5));
IBoxResponse<BoxCollection<BoxFile>> response = await ToResponseAsync<BoxCollection<BoxFile>>(request).ConfigureAwait(false);
// We can only upload one file at a time, so return the first entry
return response.ResponseObject.Entries.FirstOrDefault();
}