עזרה בREACT-הקלטות

  • פותח הנושא RGS
  • פורסם בתאריך
  • הוסף לסימניות
  • #1
אני עושה פרויקט בREACT וNODE.JS,
ואני רוצה שהמשתמש יעלה הקלטה וזה ישמר בשרת,
לאחר מכן אני רוצה להציג את ההקלטות למשתמש, אבל שיהיה בצורה מאובטחת,
ניסיתי לשלוח מהשרת באמצעות SENDFILE, והREACT לא מצליח לקבל את זה.
יש למישהו אולי רעיון נוסף?

תודה!!
 
  • הוסף לסימניות
  • #2
במקום להשתמש ב-sendFile, ניתן לשקול לשלוח את הקובץ כ-stream.
בשיטה זו, השרת ישלח את הקובץ בחלקים, מה שיכול להיות יותר יעיל לקבצים גדולים.
זה דורש קצת יותר עבודה בצד הלקוח לטיפול בנתונים, אבל אולי יהיה יעיל יותר.
 
  • תודה
Reactions: RGS
  • הוסף לסימניות
  • #3
במקום להשתמש ב-sendFile, ניתן לשקול לשלוח את הקובץ כ-stream.
בשיטה זו, השרת ישלח את הקובץ בחלקים, מה שיכול להיות יותר יעיל לקבצים גדולים.
זה דורש קצת יותר עבודה בצד הלקוח לטיפול בנתונים, אבל אולי יהיה יעיל יותר.
תודה!!
זה יפתור את הבעיה של הקבלת נתונים בצד לקוח?
כי הריאקט מצפה לקבל קבצי json והשרת לא שולח את הנתונים ככה.
 
  • הוסף לסימניות
  • #4
אני עושה פרויקט בREACT וNODE.JS,
ואני רוצה שהמשתמש יעלה הקלטה וזה ישמר בשרת,
לאחר מכן אני רוצה להציג את ההקלטות למשתמש, אבל שיהיה בצורה מאובטחת,
ניסיתי לשלוח מהשרת באמצעות SENDFILE, והREACT לא מצליח לקבל את זה.
יש למישהו אולי רעיון נוסף?

תודה!!
חסר פרטים!!
כדאי לצרף את הקוד הרלוונטי
בטוח שהקובץ נמצא?
לפני השורה של req.sendFile(file) תנסו להדפיס לקונסול את הfile, מה התוצאה?
אשמח לעזור
 
  • שכוייח!
Reactions: RGS
  • הוסף לסימניות
  • #5
כדאי לצרף את הקוד הרלוונטי
בטוח שהקובץ נמצא?
לפני השורה של req.sendFile(file) תנסו להדפיס לקונסול את הfile
אשמח לעזור

גם לריאקט נשלח הקובץ,
הבעיה שהריאקט לא מצליח להמיר את זה,
const ShowVideo = (props) => {

let videoPath = ""
const fileName=props.path.split("\\")[8]
// const[video,setVideo]=useState(false)
const [getVideo,{data,isError,isSuccess,error}] = useGetVideoByNameMutation();

useEffect(()=>{

getVideo({fileName})
console.log(data);

},[data])
השגיאה שמתקבלת היא עם סטטוס 200, ושגיאה של "is not a valid json"
כאילו הוא לא מצליח להמיר את התוכן.

אני ממש אשמח לעזרה.
תודה!!
 
  • הוסף לסימניות
  • #6
גם לריאקט נשלח הקובץ,
הבעיה שהריאקט לא מצליח להמיר את זה,
const ShowVideo = (props) => {

let videoPath = ""
const fileName=props.path.split("\\")[8]
// const[video,setVideo]=useState(false)
const [getVideo,{data,isError,isSuccess,error}] = useGetVideoByNameMutation();

useEffect(()=>{

getVideo({fileName})
console.log(data);

},[data])
השגיאה שמתקבלת היא עם סטטוס 200, ושגיאה של "is not a valid json"
כאילו הוא לא מצליח להמיר את התוכן.

אני ממש אשמח לעזרה.
תודה!!
כנראה שבקשת הקובץ לא תקינה כנראה שזה הוגדר עם await response.json();
מצרף קוד לדוגמה

קוד:
function AudioPlayer() {
  const [audioSrc, setAudioSrc] = useState('');

  const fetchAudio = async () => {
    try {
      const response = await fetch('URL_של_הקובץ');
      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
      }
      const blob = await response.blob();
      setAudioSrc(URL.createObjectURL(blob));
    } catch (e) {
      console.error('Fetching audio failed:', e);
    }
  };

  return (
    <div>
      <button onClick={fetchAudio}>טען קובץ אודיו</button>
      {audioSrc && <audio src={audioSrc} controls />}
    </div>
  );
}

export default AudioPlayer;

(וסתם הערת אגב הכותרת צריכה להיות עזרה בj.s כי זה ממש לא קשור לריאקט וכדאי להשקיע היטיב בjs לפני ריאקט)
 
  • תודה
Reactions: RGS
  • הוסף לסימניות
  • #7
כנראה שבקשת הקובץ לא תקינה כנראה שזה הוגדר עם await response.json();
זה הוגדר ככה בריאקט?
הקוד שנתת לי זה מאובטח?
כלומר האם בן אדם שיכתוב את הURL למעלה יוכל להגיע להסרטה?
 
  • הוסף לסימניות
  • #9
זה אתם צריכים לדעת! איך כתבתם את הפונקציה getVideo??
res.json(lessonVideo) ככה שלחתי את הקובץ בNODE,
זה זה?
איך אפשר לשלוח את זה שיתאים להקלטה?
תודה!!
 
  • הוסף לסימניות
  • #10
res.json(lessonVideo) ככה שלחתי את הקובץ בNODE,
res.sendFile(lessonVideo)
או לעשות תיקייה עם כל ההקלטות ולהשתמש בexpress.static

(התכוונתי לשאול איך זה כתוב בצד לקוח? - גם שם זה צריך להיות תקין וזה אמור להיות כמו הדוגמה שהבאתי מקודם)
 
נערך לאחרונה ב:
  • תודה
Reactions: RGS
  • הוסף לסימניות
  • #11
(התכוונתי לשאול איך זה כתוב בצד לקוח? - גם שם זה צריך להיות תקין וזה אמור להיות כמו הדוגמה שהבאתי מקודם)
הבעיה שאם אני משתמשת בfetch אז זה לא מאובטח,
עם fetch זה עובד מצוין

ככה זה כתוב לי בצד לקוח:
1711841908396.png


וזה הפונקציה useGetVideoByNameMutation

1711841990399.png
 
  • הוסף לסימניות
  • #12
אני רואה שבGetVideoByName זה שולח את הקובץ, איזה תשובה הוא אמור להחזיר? את הנתיב של הקובץ?
עדיין צריך לקרוא לקובץ עצמו

הבעיה שאם אני משתמשת בfetch אז זה לא מאובטח
מה הכוונה מאובטח?????????? ולמה useMutation של redux כן טוב
 
  • תודה
Reactions: RGS
  • הוסף לסימניות
  • #14
אני לא מכיר redux לעומק
אבל כמעט בטוח שיש לכם טעות בהבנה

ממליץ להשקיע בבסיס בjavaScript לפני כל הספריות השונות (אפי' אם בלימודים משום מה קופצים ישר לריאקט וכו')

מאובטח זה שלא יהיה ניתן להוריד את ההקלטה,
איך בדיוק?????? ואיך useMutation פותר את זה


עכ"פ שיהיה לכם בהצלחה
 
  • תודה
Reactions: RGS
  • הוסף לסימניות
  • #15
מאובטח זה שלא יהיה ניתן להוריד את ההקלטה,
זה לא עובד גם עם useMutation וזה כל הבעיה:(
אם מבחינתך מאובטח = לא יהיה ניתן להוריד את ההקלטה,
יש דרך אחרת לעשות שלא יהיה ניתן להוריד:
בreturn של התגית video אחרי שהגדרת רוחב וגובה תוסיפי controlsList="nodownload"
ואם הfetch עובד לך מצוין - אז הבעיה נפתרה:)
 
  • הוסף לסימניות
  • #17
הצלחתי:)

תודה!!
 

פרוגבוט

תוכן שיווקי
פרסומת

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה