راکت

نشان دادن پروسه دانلود با saga و axios

2 پاسخ

سلام دوستان.یک یه هفته ای هست این مشکل رو دارم راهنمایی کنید ممنون میشم.
میخوام همزمان که کاربر داره ویدیو رو اپلود میکنه ,پروسه دانلود و در اصل درصدی که کامل شده رو بهش نشون میدم.ولی 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));
  }
}
alibrave
alibrave
@alimohammadi1376
ثبت پرسش جدید

پاسخ‌ها

2
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

من این کار رو با PHP آنجام دادم.. هر چند کمی متفاوته اما روال کار همه جا یکی هست.
میتونی از یه وب‌سوکت سرور استفاده کنی

وقتی آپلود فایل شروع میشه:
شما به شکل منظم (مثلا هر ثانیه، یا هر چند ثانیه) حجم فایل آپلودی رو روی دیسک حساب می‌کنی
با کمی ضرب و تقسیم درصدش رو بدست میاری
و یک Event رو fire میکنی

حالا در سمت کلاینت (مثلا مرورگر) باید با یک کلاینت به اون وب‌سوکت سرور وصل بشی
و اون Event رو Listen کنی..

در این حالت هروقت رویداد سمت سرور اتفاق بیفته، خود به خوب به سمت کلاینت هم Broadcast میشه
و میتونی لحظه ای اون درصد رو نمایش بدی.


حالا اگر همین روال رو بخواهی در NodeJs هم انجام بدی کار ساده ای هست
اگر بخواهی از سرویس های آماده استفاده کنی، میشه از Pusher استفاده کرد.
اگر هم نه، که میتونی از socket.io استفاده کنی..

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

یک سری پکیج هستند این رو بصورت ساده پیاده کردند و پروگرس بار برات نمایش میدن چرا از اونا استفاده نمیکنی؟! هم پروژه ات جلو میره هم خطای کمتری متوجه وبسایتت میشه

react-fileupload-progress

شاید پاسخ شما همین‌جا باشد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام