Uploading and downloading
Transferring file content is the core of a storage integration. TTMSFNCCloudBox
uploads a local file into a Box folder and downloads a Box file to a local path,
each reporting completion through an event. Large files use Box's resumable
upload sessions automatically. This chapter covers both directions and how to
chain them.
Uploading
Upload sends a local file to a Box folder. Use the folder-name overload for a
path, or the folder-item overload when you already hold the target folder.
OnUploadFile reports the created Box item.
procedure TForm1.UploadReport;
begin
TMSFNCCloudBox1.OnUploadFile := BoxUploaded;
// Folder name (or path); pass an empty string for the root.
TMSFNCCloudBox1.Upload('/Reports', 'C:\local\Q4.pdf');
end;
procedure TForm1.BoxUploaded(Sender: TObject; const AUploadItem: TTMSFNCCloudItem;
const ARequestResult: TTMSFNCCloudBaseRequestResult);
begin
if ARequestResult.Success then
ShowMessage('Uploaded as id ' + AUploadItem.ID)
else
ShowMessage('Upload failed: ' + ARequestResult.ResultString);
end;
void __fastcall TForm1::UploadReport()
{
TMSFNCCloudBox1->OnUploadFile = BoxUploaded;
// Folder name (or path); pass an empty string for the root.
TMSFNCCloudBox1->Upload("/Reports", "C:\\local\\Q4.pdf");
}
void __fastcall TForm1::BoxUploaded(TObject *Sender, Fmx::Tmsfnccloudstorage::TTMSFNCCloudItem *AUploadItem,
TTMSFNCCloudBaseRequestResult *ARequestResult)
{
if (ARequestResult->Success)
ShowMessage("Uploaded as id " + AUploadItem->ID);
else
ShowMessage("Upload failed: " + ARequestResult->ResultString);
}
Large files are uploaded in chunks via a resumable session; the
OnUploadResumableFile, OnUploadResumableFileFinished and
OnUploadResumableFileFailed events report chunk progress and outcome.
Downloading
Download saves a Box file to a local path, by item or by name. OnDownloadFile
fires when the transfer finishes.
procedure TForm1.DownloadReport;
begin
TMSFNCCloudBox1.OnDownloadFile := BoxDownloaded;
TMSFNCCloudBox1.Download('/Reports/Q4.pdf', 'C:\local\Q4.pdf');
end;
procedure TForm1.BoxDownloaded(Sender: TObject;
const ARequestResult: TTMSFNCCloudBaseRequestResult);
begin
if ARequestResult.Success then
ShowMessage('Download complete')
else
ShowMessage('Download failed: ' + ARequestResult.ResultString);
end;
void __fastcall TForm1::DownloadReport()
{
TMSFNCCloudBox1->OnDownloadFile = BoxDownloaded;
TMSFNCCloudBox1->Download("/Reports/Q4.pdf", "C:\\local\\Q4.pdf");
}
void __fastcall TForm1::BoxDownloaded(TObject *Sender,
TTMSFNCCloudBaseRequestResult *ARequestResult)
{
if (ARequestResult->Success)
ShowMessage("Download complete");
else
ShowMessage("Download failed: " + ARequestResult->ResultString);
}
Combining an upload with a download
Chaining the two events lets you act on the uploaded item — here the file is downloaded back under a new local name as soon as the upload completes:
procedure TForm1.RoundTrip;
begin
TMSFNCCloudBox1.OnUploadFile := UploadedThenDownload;
TMSFNCCloudBox1.OnDownloadFile := BoxDownloaded;
TMSFNCCloudBox1.Upload('/Reports', 'C:\local\Q4.pdf');
end;
procedure TForm1.UploadedThenDownload(Sender: TObject;
const AUploadItem: TTMSFNCCloudItem;
const ARequestResult: TTMSFNCCloudBaseRequestResult);
begin
if not ARequestResult.Success then
Exit;
// Download the freshly uploaded item by its returned id/name.
TMSFNCCloudBox1.Download(AUploadItem, 'C:\local\Q4-copy.pdf');
end;
procedure TForm1.BoxDownloaded(Sender: TObject;
const ARequestResult: TTMSFNCCloudBaseRequestResult);
begin
if ARequestResult.Success then
ShowMessage('Round trip complete');
end;
void __fastcall TForm1::RoundTrip()
{
TMSFNCCloudBox1->OnUploadFile = UploadedThenDownload;
TMSFNCCloudBox1->OnDownloadFile = BoxDownloaded;
TMSFNCCloudBox1->Upload("/Reports", "C:\\local\\Q4.pdf");
}
void __fastcall TForm1::UploadedThenDownload(TObject *Sender,
Fmx::Tmsfnccloudstorage::TTMSFNCCloudItem *AUploadItem,
TTMSFNCCloudBaseRequestResult *ARequestResult)
{
if (!ARequestResult->Success)
return;
// Download the freshly uploaded item by its returned id/name.
TMSFNCCloudBox1->Download(AUploadItem, "C:\\local\\Q4-copy.pdf");
}
void __fastcall TForm1::BoxDownloaded(TObject *Sender,
TTMSFNCCloudBaseRequestResult *ARequestResult)
{
if (ARequestResult->Success)
ShowMessage("Round trip complete");
}
Common mistakes
- Reusing a folder item across sessions. Folder IDs are stable, but a cached
TTMSFNCCloudItemfrom a previous listing may be stale — re-list or use a folder name/path for long-lived references. - Assuming upload is synchronous.
Uploadreturns before the transfer finishes; act on the result inOnUploadFile.
Related API
TTMSFNCCloudBox—Upload,Download,OnUploadFile,OnDownloadFile