آپلود

برای ارسال تصویر، ویدیو، فایل صوتی، صدا و... باید ابتدا آن را در سرور آیگپ آپلود کرده و پس از این که آپلود با موفقیت انجام شد رشته‌ای encode شده در پاسخ درخواست دریافت خواهید کرد . شما میتوانید با استفاده از این رشته فایل خود را برای کاربر ارسال کنید. همچنین شما می‌توانید با ذخیره این رشته، در ارسال‌های بعدی بارها از آن بدون آپلود مجدد استفاده کنید.

برای آپلود فایل شما باید سه مرحله ی زیر را به ترتیب انجام دهید.

  1. ابتدا باید سایز فایل مورد نظر را بدست آورید و آن را در پروتو FileUploadOption در متد setSize قرار دهید و آن را ارسال نمایید.
const Option = new FileUploadOption();
Option.setSize(size);
//send to API
  1. سپس با استفاده از response متد بالا مقدار های LastBytesLimit و FirstBytesLimit را دریافت نمایید و در پروتو FileUploadInit در متدهای setFirstBytes و setLastBytes و سایز فایل را در متد setSize و نام فایل را در متد setFileName قرار دهید و آن را ارسال نمایید.
const firstBytes = Buffer.alloc(Option.getFirstBytesLimit());
const lastBytes = Buffer.alloc(Option.getLastBytesLimit());
const fd = await fs.openSync(url, "r");
await fs.readSync(fd, firstBytes, 0, Option.getFirstBytesLimit(), 0);
await fs.readSync(fd, lastBytes, 0, Option.getLastBytesLimit(), size - Option.getLastBytesLimit());
const uploadInit = new FileUploadInit();
uploadInit.setFirstBytes(firstBytes);
uploadInit.setLastBytes(lastBytes);
uploadInit.setSize(size);
uploadInit.setFileName(fileName);
//send to API

نکته : مقادیر fileOption.getFirstBytesLimit() و fileOption.getLastBytesLimit() هردو عدد هستن و یاید به بافر تبدیل بشوند

  1. سپس با استفاده از response متد بالا مقدار های Offset و Limit و token را دریافت نمایید و در پروتو fileUpload در متدهای setOffset و setBytes و setToken قرار دهید و ارسال نمایید. این مرحله تا زمانی که مقدار progress کمتر از 100** است باید مرتب تکرار شود.
let progress = fileInit.getProgress();
let offset = fileInit.getOffset();
let limit = fileInit.getLimit();
while (progress < 100) {
const bytes = Buffer.alloc(limit);
await fs.readSync(fd, bytes, 0, limit, offset);
const upload = new FileUpload();
upload.setToken(fileInit.getToken());
upload.setOffset(offset);
upload.setBytes(bytes);
//send to API
progress = fileUpload.getProgress();
offset = fileUpload.getNextOffset();
limit = fileUpload.getNextLimit();
}

و در نهایت برای گرفتن وضعیت آپلود فایل توکن دریافتی را با متود ()fileInit.getToken بدست آورده و آن را به پروتو FileStatus ارسال کند. سپس از response آن با استفاده از متد ()getStatus وضعیت آپلود خود را دریافت نمایید.

const uploadStatus = new FileUploadStatus();
uploadStatus.setToken(fileInit.getToken());
//send to API
const getStatus = fileStatus.getStatus();
if (getStatus === PROCESSED) {
console.log("success");
}
if (getStatus === PROCESSING) {
console.log("unSuccess");
// again check status
}