آپلود
برای ارسال تصویر، ویدیو، فایل صوتی، صدا و... باید ابتدا آن را در سرور آیگپ آپلود کرده و پس از این که آپلود با موفقیت انجام شد رشتهای encode شده در پاسخ درخواست دریافت خواهید کرد . شما میتوانید با استفاده از این رشته فایل خود را برای کاربر ارسال کنید. همچنین شما میتوانید با ذخیره این رشته، در ارسالهای بعدی بارها از آن بدون آپلود مجدد استفاده کنید.
برای آپلود فایل شما باید سه مرحله ی زیر را به ترتیب انجام دهید.
- ابتدا باید سایز فایل مورد نظر را بدست آورید و آن را در پروتو FileUploadOption در متد
setSize
قرار دهید و آن را ارسال نمایید.
const Option = new FileUploadOption();
Option.setSize(size);
//send to API
- سپس با استفاده از 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() هردو عدد هستن و یاید به بافر تبدیل بشوند
- سپس با استفاده از 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
}