@ivrtikshoret אכן זה היה הבעיה!
לא שמתי לב לזה לפני זה בשרשור המקורי..
עדכנתי את הקוד למעלה לקוד התקין, אם יש מישהו שצריך...
@ivrtikshoret אכן זה היה הבעיה!
לא שמתי לב לזה לפני זה בשרשור המקורי..
עדכנתי את הקוד למעלה לקוד התקין, אם יש מישהו שצריך...
תגובה: העלאת קובץ בapi לימות המשיח | קוד שבפייתון עובד וב nodejs לא כל כך
אני גם כן נתקל בבעיה דומה בקוד C#, מתעבורת הרשת נראה בבירור שהחלקים נשלחים היטב לשרת, אבל בסוף אני מקבל קובץ ריק, (התגובה מימות תקינה ומופיע שגודל הקובץ הוא 0)
דבר נוסף שייתכן שהא בהא תליא, למרות שמוגדר autoNumbering וconvertAudio בפועל הקובץ לא מומר (לכאורה) והוא נשמר עם השם המקורי.
יצויין שקבצים קטנים מ50 מגה עולים היטב, ומומרים וממוספרים כהוגן.
להלן הקוד הרלוונטי, וכאן התיעוד
אם צריך טוקן בשביל לבדוק אפשר ליצור קשר בפרטי
עדכון: הקוד עודכן וכעת הוא עובד היטב,
(שימו לב שבקבצים קטנים מ50 מגה (העלאה רגילה) השם המקורי שנשמר בפרטי הקובץ משבש את התווים העבריים, בהעלאה בחלקים זה נשמר בפרטי הקובץ בצורה טובה)
public class YemotUploader
{
private const int ChunkSize = 5000000;
private async Task<List<byte[]>> ReadInChunksAsync(string filePath)
{
var chunks = new List<byte[]>();
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[ChunkSize];
int bytesRead;
while ((bytesRead = await fileStream.ReadAsync(buffer, 0, ChunkSize)) > 0)
{
var chunk = new byte[bytesRead];
Array.Copy(buffer, chunk, bytesRead);
chunks.Add(chunk);
}
}
return chunks;
}
public async Task<Dictionary<string, string>> UploadFileAsync(
string filePath,
string path,
string tokenYemot
)
{
if (new FileInfo(filePath).Length > 5000000)
{
var contentName = Path.GetFileName(filePath);
var contentPath = Path.GetFullPath(filePath);
var contentSize = new FileInfo(contentPath).Length;
var qquuid = Guid.NewGuid().ToString();
var chunks = await ReadInChunksAsync(contentPath);
var offset = 0;
foreach (var chunk in chunks)
{
using (var httpClient = new HttpClient())
using (var content = new MultipartFormDataContent())
{
content.Add(new StringContent(tokenYemot), "token");
content.Add(new StringContent(path), "path");
content.Add(new StringContent(qquuid), "qquuid");
content.Add(new StringContent("1"), "convertAudio");
content.Add(new StringContent("true"), "autoNumbering");
content.Add(new StringContent("yemot-admin"), "uploader");
content.Add(new StringContent(contentName), "qqfilename");
content.Add(new StringContent(contentSize.ToString()), "qqtotalfilesize");
content.Add(new StringContent(chunks.Count.ToString()), "qqtotalparts");
content.Add(new StringContent(chunk.Length.ToString()), "qqchunksize");
content.Add(new StringContent(offset.ToString()), "qqpartbyteoffset");
content.Add(new StringContent(chunks.IndexOf(chunk).ToString()), "qqpartindex");
content.Add(
new ByteArrayContent(chunk)
{
Headers =
{
ContentDisposition =
new System.Net.Http.Headers.ContentDispositionHeaderValue(
"form-data"
)
{
Name = "\"qqfile\"",
FileName = $"\"{contentName}\"",
},
ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(
"application/octet-stream"
)
}
},
"qqfile"
);
var response = await httpClient.PostAsync(
"https://www.call2all.co.il/ym/api/UploadFile",
content
);
offset += chunk.Length;
}
}
var doneData = new Dictionary<string, string>
{
{ "token", tokenYemot },
{ "path", path },
{ "uploader", "yemot-admin" },
{ "convertAudio", "1" },
{ "autoNumbering", "true" },
{ "qquuid", qquuid },
{ "qqfilename", contentName },
{ "qqtotalfilesize", contentSize.ToString() },
{ "qqtotalparts", chunks.Count.ToString() },
};
using (var httpClient = new HttpClient())
{
var doneResponse = await httpClient.PostAsync(
"https://www.call2all.co.il/ym/api/UploadFile?done",
new FormUrlEncodedContent(doneData)
);
var doneResponses = (await doneResponse.Content.ReadAsStringAsync()).Split("}{");
foreach (var response in doneResponses)
{
try
{
Console.WriteLine(response);
}
catch (Exception ex)
{
Console.WriteLine("Error decoding JSON: " + ex.Message);
}
}
}
return null;
}
else
{
var url = "https://www.call2all.co.il/ym/api/UploadFile";
var parameters = new Dictionary<string, string>
{
{ "token", tokenYemot },
{ "path", path },
{ "convertAudio", "1" },
{ "autoNumbering", "true" },
};
using (var httpClient = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
foreach (var parameter in parameters)
{
formData.Add(new StringContent(parameter.Value), parameter.Key);
}
var streamContent = new StreamContent(File.OpenRead(filePath));
streamContent.Headers.ContentDisposition =
new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
{
Name = "\"file\"",
FileName = $"\"{Path.GetFileName(filePath)}\"",
};
formData.Add(streamContent, "file");
var response = await httpClient.PostAsync(url, formData);
var jsonResponse = await response.Content.ReadAsStringAsync();
Console.WriteLine(jsonResponse);
return null;
}
}
}
}
אני קורא לזה כך
string path = textBox1.Text;
var fileUploader = new YemotUploader();
await fileUploader.UploadFileAsync(path, "ivr2:1", "079999999:12345");
@mekev אולי ביפעת בקרת פרסום קיימים נתונים כאלה..
@ששא אז תעבור כל יום ב4 לפנות בוקר..
@יעקב-מ-פינס למרבית הדברים, ישנם דברים שעדיין לא עובדים עם תעודת אבטחה שלא מותקנת ברוט..
תוודא מול נטפרי שמה שאתה צריך אכן עובד..
@יעקב-מ-פינס רק שים לב שא"א לשרש אותו בצורה רגילה, ככה שלא תוכל לשים תעודה בתעודות המערכת.
@יעקב-מ-פינס אם ככה, כל מה שכתבו כאן יתאים לך, הן הT225 של סמסונג, והן הTB-7306X (שים לב שבלנובו טאב הדגם עם הF הוא ללא סים, והדגם הזה ספציפית הוא דור 2 ודור 4 ללא דור 3).
@ששא אינני מבין בקונטאבו, אבל האם ביצעת לאחרונה איזה שינוי כלשהו במערכת, התקנת/הסרת תוכנה וכדו'?
בנוסף, אינני יודע האם זה קיים, אבל אם יש אפשרות לגשת ללוגים מסוימים של השרת דרך ממשק הניהול של השרת באתר, נסה להציץ שם ולראות אולי יש שם משהו שיוכל לעזור לך להבין מה הבעיה..
@קינג-קומפיוטר @יעקב-מ-פינס יש לי TB-7304F והוא אנדרואיד 7 וישן מאוד, בן 6-7 שנים , והוא עובד איטי זוועה גם בלי קשר לוויפרי.
אבל יש לי גם את הדגם החדש, TB-7306X והוא יותר מהיר, ועדיין לא נחשב מהיר במיוחד (3-4 טאבים בכרום הוא כבר מתחיל למצמץ ), אבל לא חושב ששמתי לב להבדל בעניין לעם או בלי הוויפרי, סתם ככה כל הטאבלטים שקיימים בגדלים של ה7-8 אינצ' הם לא משהו מבחינת המפרט משום מה..
שניהם עבדו נחמד עם הווייפרי, מלבד עניין עדכון האפליקציות בישן (ה7304F) שהוא אנדרואיד 7, ובוויפרי ניתן להתקין רק ממה שקיים בגוגל פליי, מה שתוקע לפעמים אפליקציות מסוימות, אבל זה יותר אשמת יישונו של הטאבלט מאשר אשמת הוויפרי
@שמואל4 כתב בבקשה למ"מ מפסק (חכם?) שנשלט מרחוק עם API:
או מוכן לבנות משהוא בעצמך?
תודה. בעיקרון זה מה שחיפשתי, משהו שאתה יכול להתממשק אליו ישירות ללא תלות בשירותי היצרן..
אני אבדוק מאוחר יותר אם זה אכן מתאים למה שאני צריך...
@NH-LOCAL כתב באני רוצה לקנות את הכוננים האלו, משתלם לי?:
אלי אקספרס
2 מוצרים בחברת שילוח פרטית (בר אני חושב) הגיעו בערב לנקודת איסוף,
וכעת ראיתי שבבוקר הגיע מייל מדואר ישראל על מוצר שלישי שהגיע לארץ ונמצא כעת במודיעין, (מגדיל טווח של שיאומי, מקווה שלא יעכבו לי אותו )
עריכה: כעת ראיתי בעלי "לדעת יותר מידע,להתקשר לקו החם: 171" שזה דואר ישראל, על פריט שהגיע לנקודת מסירה וההודעות במייל הם מחברת בר, בדואר ישראל זה עדיין בסטטוס של התקבל מידע על חבילה המיועדת להישלח..
אבל זה כבר נושא אחר..
@NH-LOCAL כתב באני רוצה לקנות את הכוננים האלו, משתלם לי?:
מה שכן, חשוב להביא בחשבון שבגלל המלחמה, יכול להיות עיכוב מאוד משמעותי בקבלת משלוחים מחו"ל. (הזמנתי היום מוצר מעלי אקספרס, ותאריך היעד לקבלה הוא ה-28 בינואר!)
אני הזמנתי שבוע שעבר כמה דברים, 2 מתוכם הגיעו היום לנקודת חלוקה
@אף-אחד-3 הלינקים מפנים לאותו מקום.. לSSD...
לגופה של שאלה, אינני מייבין בתחום, אבל אני חושב שכדאי לך ללכת בשניהם על SSD אם אין פער גדול במחיר..
(ולא אמור להיות פער גדול, כי אתה לא צריך כונן מהיר אלא מספיק לך הסדרות הפשוטות של סמסונג וכדו', רק חשוב לבדוק לפני זה בגוגל שבאמת אין לדגם הזה בעיות, יש עכשיו לסאנדיסק איזה פדיחה גדולה שהבנתי שמובילה לתביעה ייצוגית בארה"ב)
אני צריך לעשות מפסק חשמלי שיתאים להספק של שקע רגיל, (אבל ישולב בכבל עצמו/בלוח) שניתן יהיה לשלוט בהפעלה והכיבוי שלו מרחוק, עם API באמצעות האינטרנט (לא אפליקציות ודומיהם אלא בקריאת וובהוק או משהו דומה..).
מגוגל יצאתי מבולבל לגמרי ולא יודע מה לנסות ומאיפה להתחיל לבדוק...
לכן, אשמח למ"מ לחומרה מתאימה וכן לספריות וכל מידע בעניין...
תודה.
@one1010 כתב בצאט AI | מודל שפה!:
כי א"כ מה מניע אנשים להשקיע כסף במה שהם לא הולכים להרוויח ממנו?
מחקר ,
ויהיו שיגידו מו"פ...
ועיין גם בערך של המודל העסקי של OpenAI והמלכ"ר ששולט עליה..
@צבי-ש אפשר לוודא שזה יהיה שלוחה פנימית בלבד, ע"י משחק בנתיב שיתבצע בשרת עצמו, אבל לא בכל מקרה זה יהיה אפשרי..
@טוב-להודות אם הפחד שלך הוא ממביני עניין, אז אין שום דרך להגן על זה ללא שרת מתווך, ואם יש שרת מתווך, אז כבר לא צריך שום הגנה לטוקן, כי המשתמש יקבל רק את הקובץ מהשרת שלך..
אולי יום אחד ימות ישתדרגו ויעשו מערכת לניהול טוקני התחברות עם הרשאות מוגבלות , לדעתי זה לא ממש מסתדר מבחינה רעיונית, כי אין אצל ימות "חשבון משתמש" אלא כל מערכת היא בנפרד... אלא רק אם ישנו את הקונספט שלכל מערכת יהיה חשבון משתמש אב שאליו תשוייך המערכת, כמו שעושים בריסיילרים של ימות..
@קינג-קומפיוטר כתב במחנה דורה בנתניה- קיים עדיין?:
שמעתי פעם
פעם...
היום אתה יכול לראות הכל בתצ"א, זה לא מוגבל, המדינה מגבילה את הרזולוציה של התצ"א של גוגל בכל הארץ לרזולוציה מפגרת, כמעט ולא נשאר מה להגביל
תמונה של הקריה למחקר גרעיני - נגב מגוגל מפס, אתה יכול לראות בצד שמאל למטה את הכיפה של מפעל הטקסטיל..
וזה מקום שאם אתה עומד בתחנת האוטובוס של צומת רותם יותר מ2 דק', כבר מגיעים לתשאל אותך..
@צדיק-תמים כתב בקבצי ימות המשיח, הגנה על הטוקן:
ואם כל פחות משעה תשלח איתו קריאה לAPI הוא לא יפוג אף פעם
רשמית.
דה פקטו זה לא בדיוק נכון, אני שמתי לב שבכל מוצ"ש בד"כ, יש איפוס או יותר נכון זמן שהמערכת לא זמינה ואז הטוקן מתאפס