איך להעלות קבצים מהשרת?
-
@chaim7 אמר באיך להעלות קבצים מהשרת?:
@nyh
שלום לשמואל 'ניהול ראשי'
סתם מתוך הסקרנות ו'הצמאון לדעת' בתור הספטס הגדול אני מאמין שאתה הוא הכתובת.
אני רוצה לנסות להעלות קובץ מתוך השרת שלי בלי המחלקה ---
אתה בטח מבין את אופן העבודה עם הAPI, ואני משתגע לקלוט
למה הקוד הזה מביא לי שגיאה 105?
הטוקן מתחבר.
הוא לכאורה יודע מאיפה לשאוב את הנתונים --fileUpload$
ולאיפה להכניס אותם --pathinyemot$
שולח POST
מה צריך לשנות בשביל שיהיה נכון?
בתודה על ההסברים היפים והברורים שלך באופן כללי....$fileUpload="recording/5.wav"; //קח את הקובץ הזה $pathinyemot="ivr2:1/7.wav"; //תכניס לימות במיקום הבא $url = "https://www.call2all.co.il/ym/api/Login?username=0799*****&password=1234"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // החזר את תוכן העמוד. curl_setopt($ch, CURLOPT_URL, $url); //מעביר את כתובת האתר למשתנה. $result = curl_exec($ch); //תוצאה=תגובת השרת $json = "$result"; //מכניס את השורה למשתנה $obj = json_decode($json); //יעשה מהשורה ג'סון //https://www.php.net/manual/en/function.json-decode.php $the_token= $obj->{"token"}; //יקבל את הטוקן אל תוך משתנה //echo "הטוקן הוא: $the_token"; $url2 = "https://www.call2all.co.il/ym/api/UploadFile?token=$the_token"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url2); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'Upload' => file_get_contents($fileUpload), 'path' => $pathinyemot )); $result = curl_exec($ch); echo $result; curl_close($ch);
אתה לא כתבת פה שיעלה איך שמעלים קובץ אלא סתם כמערך רגיל
גם אני הסתבכתי לפני כמה ימים בעניין
תבדוק פה
https://f2.freeivr.co.il/topic/7816/איך-מעלים-קובץ-שמע-בapi-עם-הפונקציה-של-שמואל/10?_=1641169716468 -
@mgm-ivr
תודה על התגובה! (פגשתי וקראתי את הפוסט שלך הרבה מאוד פעמים בתוך כדי חיפוש...)
עד כמה שהבנתי אתה מייצר טופס וקבלה של הטופס האותו כתובת. זה מאוד יפה! עבודה טובה!
אני צריך עכשיו שהPHP יקח קובץ מהשרת וישלח אותו לימות בלי טופס את הפרטים הוא ישיג מהטבלאות שלו..... -
@chaim7 אמר באיך להעלות קבצים מהשרת?:
@mgm-ivr
תודה על התגובה! (פגשתי וקראתי את הפוסט שלך הרבה מאוד פעמים בתוך כדי חיפוש...)
עד כמה שהבנתי אתה מייצר טופס וקבלה של הטופס האותו כתובת. זה מאוד יפה! עבודה טובה!
אני צריך עכשיו שהPHP יקח קובץ מהשרת וישלח אותו לימות בלי טופס.זה גם מה שאני עשיתי
תסתכל שם בתגובה של@amp-software-0 אמר באיך מעלים קובץ שמע בAPI עם הפונקציה של שמואל?:
@mgm-ivr @מנסה
ערכתי את הקוד של @שמואל לשימוש ציבורי
זה הקודfunction uploadFile($isPrivate, $token ,$path ,$file) { if ($isPrivate) { $YemotUrl = 'https://private.call2all.co.il/ym/api/'; } else { $YemotUrl = 'https://www.call2all.co.il/ym/api/'; } $headers = array( 'Content-type: multipart/form-data' ); $url = $YemotUrl . 'UploadFile'; $target = new CURLFile($file,'media/wav'); $parm['upload'] = $target; $parm['token'] = $token; $parm['path'] = $path . '/' . $target->getFilename(); $curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $parm, CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, ) ); $response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($response, true); return $response; }
צריך לשלוח 4 פרמטרים
isPrivate
- ערך בוליאני אם המערכת בשרת פרייבט,token
,path
, ו-file
- שם הקובץ להעלאהדוגמא
uploadFile(false,'0773137770:2580','ivr2:/1','M1024.wav');
בדוגמא הקובץ נמצא באותה תיקיה של קובץ ה php, במידה והקובץ להעלאה נמצא בתיקיה משנית (הנקראת לדגומא subFolder) יש להזין כך:
uploadFile(false,'0773137770:2580','ivr2:/1','subFolder/M1024.wav');
הפונקציה מחזירה אובייקט json עם נתוני הפעולה, ניתן לקבל אותו גם כסטרינג כמובן
עם זה אני נעזרתי
אני חושב שזה יעזור גם לך -
@mgm-ivr
הוא נתקע בגלל שגיאה בשורה הזאת:$response = curl_exec($curl);
כלומר לא מצליח לפתוח את הקישור
-
שים לב שחסר שם את פרמטר ההמרה לשמע , ובהמשך השרשור שם שמתי עם הפרמטר הזה ואז הכל תקין [אני הצלחתי להעלות...]
-
@מנסה
אחרי שישבתי שעות ארוכות על העלאה של קובץ ואחרי עשרות כשלונות גיליתי שהקובץ משום מה הפך ל0.1 קילובייט וזה גרם לי שגיאה
תכלס - מה אשיב לה' [המדרש בילקוט שמעוני כותב 'חביב עלי חסד שאתם עושים זה עם זה יותר מזבחי שלמה המלך(הושע תקכב)]-
ע"כ מצורף שיפוץ של הקוד הבהיר של @mgm-ivr ו @מנסה הצדיקים .
אני כל כך רוצה גם לתרום משהו....
אז פשוט הוספתי הודעות של הפרטים החשובים עד שהגעתי למצוא את מקור השגיאה אצלי, ובעז"ה שיהיה לתועלת לאחרים.<?php $token = "0799*****:*****"; $path_in_yemot="ivr2:1/"; $New_file_name_to_yemot = "A123.wav"; $fileUpload="recording/A123.mp3"; //קריאה לפונקציה והוספתי האן עוד פרמטר שהוא שם קובץ היעד ss = uploadFile(false,$token,$path_in_yemot,$New_file_name_to_yemot,$fileUpload); //מראה את התשובה מימות, ניתן כמובן לבטל או להציג משהו אחר print_r ($ss); function uploadFile($isPrivate, $token ,$path ,$New_name,$file) { if ($isPrivate) { $YemotUrl = 'https://private.call2all.co.il/ym/api/'; } else { $YemotUrl = 'https://www.call2all.co.il/ym/api/'; } $headers = array( 'Content-type: multipart/form-data' ); $url = $YemotUrl . 'UploadFile'; $File_source = new CURLFile($file,'media/wav'); $parm['token'] = $token; $parm['upload'] = $File_source; $parm['path'] = "$path$New_name"; $parm['convertAudio'] = 1; //-----------------------------------ביקורת---------------------------------- if (file_exists($file)==0) { $message = "הקובץ $file לא נמצא"; } $message="$message <br> הטוקן הוא: " . $parm['token'] ."<br>"; $message="$message שם הקובץ: " . $File_source->getFilename() . "<br>"; $message="$message גודל הקובץ הוא: " . ": " . filesize($file) . " bytes<br>"; $message="$message נתיב היעד בימות המשיח: " . $parm['path'] . "<br>"; //-------------בדיקה אם קיים כזה קובץ $GetIvrTree = file_get_contents("http://call2all.co.il/ym/api/GetIvrTree?token=$token&path=ivr2:1"); if (mb_strpos($GetIvrTree, $New_name)>0) { $message="$message <br> יש כבר קובץ בשם זהה לקובץ זה! "; $message="$message <br> הפעולה לא בוצעה "; goto a; } //-----------------------------------עד כאן--------------------------------- $curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $parm, CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, ) ); $response = curl_exec($curl); // echo "$response"; $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($response); a: $responseStatus = $response->{"responseStatus"}; if(!$responseStatus=="OK"){ return "$response <br> $message"; } else{ return "הקובץ עלה בהצלחה!"; } } ?>
ה'ביקורת קבצים (GetIvrTree)' לא מושלם בגלל שלא הצלחתי לפרק את המערך ולזהות את שם הקובץ, התחליף שאלטרתי הוא שהקוד מחפש את שם הקובץ בתוך הסטרינג שחוזר מימות המשיח (mb_strpos).
[הבעיה תהיה כשאתה מכניס קובץ בשם 1, וקיים כבר קוובץ בשם 11 הוא יעצור את התהליך כי הוא מצא את הספרה 1 וwav . (בתור 'תלאי על תלאי' אולי אפשר להוסיף נקודותיים לפני ופסיק אחרי שם הקובץ -- לא ניסיתי עדיין)
תודה לכולם והצלחה!!! -