alibrave
4 سال پیش توسط alibrave مطرح شد
2 پاسخ

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

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

ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

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

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

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

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


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


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
1

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

react-fileupload-progress

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

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