سلام دوستان.یک یه هفته ای هست این مشکل رو دارم راهنمایی کنید ممنون میشم.
میخوام همزمان که کاربر داره ویدیو رو اپلود میکنه ,پروسه دانلود و در اصل درصدی که کامل شده رو بهش نشون میدم.ولی eventchannel درصد رو emit نمیکنه و برنمیگردونه.
@hesammousavi
@milad
@mhyeganeh
@ali.bayat
اینم کد saga.js:
const identity = a => a;
const createAsyncUpload = file => {
let emit;
const chan = eventChannel(emitter => {
emit = emitter;
return () => {};
});
const promise = uploadVideoApi(file, function promiseFunction(e) {
emit((e.loaded * 100) / e.total);
})
.then(response => emit({ state: 'ok', response }))
.catch(error => emit({ state: 'nok', error }));
return [promise, chan];
};
function* watchOnProgress(chan) {
while (true) {
const data = yield take(chan);
if (typeof data === 'number') {
yield put(fileUploadProgressAction(data));
} else if (data.state === 'ok') {
yield put(fileUploadSuccessAction(data.response.data));
} else {
yield put(fileUploadFailAction(data.error.response));
}
}
}
function* uploadVideo({ file }) {
try {
const [promise, chan] = createAsyncUpload(file);
yield fork(watchOnProgress, chan);
yield call(identity(promise));
} catch (error) {
yield put(fileUploadFailAction(error));
}
}
من این کار رو با PHP آنجام دادم.. هر چند کمی متفاوته اما روال کار همه جا یکی هست.
میتونی از یه وبسوکت سرور استفاده کنی
وقتی آپلود فایل شروع میشه:
شما به شکل منظم (مثلا هر ثانیه، یا هر چند ثانیه) حجم فایل آپلودی رو روی دیسک حساب میکنی
با کمی ضرب و تقسیم درصدش رو بدست میاری
و یک Event رو fire میکنی
حالا در سمت کلاینت (مثلا مرورگر) باید با یک کلاینت به اون وبسوکت سرور وصل بشی
و اون Event رو Listen کنی..
در این حالت هروقت رویداد سمت سرور اتفاق بیفته، خود به خوب به سمت کلاینت هم Broadcast میشه
و میتونی لحظه ای اون درصد رو نمایش بدی.
حالا اگر همین روال رو بخواهی در NodeJs هم انجام بدی کار ساده ای هست
اگر بخواهی از سرویس های آماده استفاده کنی، میشه از Pusher استفاده کرد.
اگر هم نه، که میتونی از socket.io استفاده کنی..
یک سری پکیج هستند این رو بصورت ساده پیاده کردند و پروگرس بار برات نمایش میدن چرا از اونا استفاده نمیکنی؟! هم پروژه ات جلو میره هم خطای کمتری متوجه وبسایتت میشه
react-fileupload-progress
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟