API באקסס
-
נכון. אבל למה באתי לפה, כי זה לא עובד.
https://www.call2all.co.il/ym/api/UploadFile?token=XXXXXXXXXXXXXXXX&path=1.tts&upload=Yemot
אני מנסה את זה, בדפדפן, וזה לא עובד. מישהו יודע איפה הטעות?
או: מה הפרמטר של הקובץ עצמו, ובאיזה צורה.
אם אתה רוצה טוקן, אני יכול לתת לך, השאלה איך.פורסם במקור בפורום CODE613 ב01/04/2017 21:28 (+03:00)
-
@מצפה לגדול
נכון. אבל למה באתי לפה, כי זה לא עובד.
https://www.call2all.co.il/ym/api/UploadFile?token=XXXXXXXXXXXXXXXX&path=1.tts&upload=Yemot
אני מנסה את זה, בדפדפן, וזה לא עובד. מישהו יודע איפה הטעות?
או: מה הפרמטר של הקובץ עצמו, ובאיזה צורה.
אם אתה רוצה טוקן, אני יכול לתת לך, השאלה איך.אתה משרשר בבבקשה את הגוף כפרמטרים, אבל א. השרת מצפה שהפרמטרים יהיו בPOST (גוף הבקשה ולא בURL) + פורמט ששמו multipart ב. אתה בכלל לא נותן את תוכן הקובץ רק את שמו. אין אפשרות לשרת לדלות את הקובץ שלך מהמחשב שלך.
פורסם במקור בפורום CODE613 ב01/04/2017 21:31 (+03:00)
-
זה גם לא עובד.אני רוצה שתוכן הקובץ יבוא ממשתנה טקסטואלי, לא מקובץ.
למשל כרגע אני רוצה שתוכן הקובץ יהיה "Yemot".
והנתיב, זה הנתיב של הקובץ ב"ימות".פורסם במקור בפורום CODE613 ב01/04/2017 21:35 (+03:00)
-
רק שיהיה דוגמא שלמה.
זה העלאת קובץ מהזיכרון הראם.
const request = require("request"); var formData = { token: 'token', path: '1.tts', upload: new Buffer('text upload'), convertAudio: '1' }; request.post({ url:'https://www.call2all.co.il/ym/api/UploadFile' , formData: formData , json: true }, function optionalCallback(err, httpResponse, body) { if (err) { return console.error('upload failed:', err); } console.log('Upload successful! Server responded with:', body); });
פורסם במקור בפורום CODE613 ב01/04/2017 21:46 (+03:00)
-
טוב, מה הלאה?
פורסם במקור בפורום CODE613 ב01/04/2017 21:59 (+03:00)
-
היי, סיכמנו על סי שארפ?
(איזה נחת יש לך...)
(וגם אני לא יודע מה זה נוד)
פורסם במקור בפורום CODE613 ב01/04/2017 22:19 (+03:00)
-
@מצפה לגדול
זה גם לא עובד.
אני רוצה שתוכן הקובץ יבוא ממשתנה טקסטואלי, לא מקובץ.
למשל כרגע אני רוצה שתוכן הקובץ יהיה "Yemot".
והנתיב, זה הנתיב של הקובץ ב"ימות".אינני מכיר את התוסף הזה (נראה נחמד אבל קשה לי בנטפרי להתקינו)
אבל כנראה אינך משתמש בו כהלכה: הURL אמור להיות ללא כל פרמטר ועליך להוסיף את ארבעת הפרמטרים באיזו שהיא דרך לגוף הבקשה.פורסם במקור בפורום CODE613 ב01/04/2017 22:20 (+03:00)
-
זה עובד בהורדת קבצים. רק בהעלאה זה מחזיר שגיאה.
פורסם במקור בפורום CODE613 ב01/04/2017 22:21 (+03:00)
-
בא תסביר לי רק תאורטית:
מה זה "באיזו שהיא דרך"?
זה לא נשלח כחלק מהURL?
אם אני יושב שם במקום השרת מה אני מקבל?פורסם במקור בפורום CODE613 ב01/04/2017 22:29 (+03:00)
-
@מצפה לגדול
בא תסביר לי רק תאורטית:
מה זה "באיזו שהיא דרך"?
זה לא נשלח כחלק מהURL?
אם אני יושב שם במקום השרת מה אני מקבל?זה מגיע בגוף הבקשה, בקשת GET מכילה את המידע ב URL, ובקשת POST מוסיפה body לבקשה עם המידע, בתוסף שאתה משתמש צריך להוסיף את הנתונים בשדה Raw payload בפורמט של key=value&key2=value2 או בשדה data form כמו טופס שהשמאלי זה ה key והימני זה value
פורסם במקור בפורום CODE613 ב01/04/2017 22:33 (+03:00)
-
טוב יש לי זמן, בא נמשיך.
כעת תעשה בלי להבין סתם בשביל לסגור את הפער של צורך העניין שלשמו באת
(לא הבנתי עד הסוף מה הפרוצדורה אבל אתה כנראה כבר תדע לכוון אותי)
את המשך הלימוד נדחה לאחרי זה אם יהיה לי (ולך) כח.כעת תעשה כמו תוכי:
תקליק בימני על סמל הפרוייקט, ותבחר בתפריט הנפתח Add, ובתת בתפרטי בclass...
בחלון הנפתח תן שם למטה: PostMultipart
בדף שנפתח תדביק את התוכן הבא:using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Net; using System.Text; class PostMultipart { public PostMultipart() { Files = new List<UploadFile>(); Values = new NameValueCollection(); } public List<UploadFile> Files { get; set; } public NameValueCollection Values { get; set; } public class UploadFile { public UploadFile(string name, string filename, Func<Stream> getStream, string contentType = "application/octet-stream") { Name = name; Filename = filename; ContentType = contentType; GetStream = getStream; } public string Name { get; } public string Filename { get; } public string ContentType { get; } public Func<Stream> GetStream { get; } } public byte[] GetResponseBytes(string address) { var request = WebRequest.Create(address); var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); request.Method = "POST"; request.ContentType = "multipart/form-data; boundary=" + boundary; boundary = "--" + boundary; using (var requestStream = request.GetRequestStream()) { foreach (string name in Values.Keys) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.UTF8.GetBytes(Values[name] + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); } foreach (var file in Files) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); using (var stream = file.GetStream()) stream.CopyTo(requestStream); buffer = Encoding.ASCII.GetBytes(Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); } var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--"); requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length); } using (var response = request.GetResponse()) using (var responseStream = response.GetResponseStream()) using (var stream = new MemoryStream()) { responseStream.CopyTo(stream); return stream.ToArray(); } } }
כעת פתח את הפאנל למטה בשם Nuget Manager Console והדבק שם את הטקסט הבא:
Install-Package Newtonsoft.Jsonבע"ה אמשיך בקרוב.
פורסם במקור בפורום CODE613 ב01/04/2017 23:37 (+03:00)
-
Each package is licensed to you by its owner. NuGet is not responsible for, nor does it grant any licenses to, third-party packages. Some packages may include dependencies which are governed by additional licenses. Follow the package source (feed) URL to determine any dependencies. Package Manager Console Host Version 4.0.0.2323 Type 'get-help NuGet' to see all available NuGet commands. PM> Install-Package Newtonsoft.Json Install-Package : Solution is not saved. Please save your solution before managing NuGet packages. At line:1 char:1 + Install-Package Newtonsoft.Json + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Install-Package], InvalidOperationException + FullyQualifiedErrorId : NuGetUnsavedSolution,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand PM>
פורסם במקור בפורום CODE613 ב01/04/2017 23:41 (+03:00)
-
OK
אגב, הנה הפרוייקט הראשון שלי בWPF:
הפרוייקט הראשון שלי.rar
מה דעתך?פורסם במקור בפורום CODE613 ב02/04/2017 08:40 (+03:00)
-
@מצפה לגדול
OK
אגב, הנה הפרוייקט הראשון שלי בWPF:מה דעתך?
יפה מאוד!
בא נמשיך. תוסיף את המתודה הזאת לקוד שלך (בMainWindow.xaml.cs):
void SendFileToYemotHamashiach() { PostMultipart post = new PostMultipart(); string fileLocation = @"c:\1.tts"; PostMultipart.UploadFile file = new PostMultipart.UploadFile("upload", "1.tts", () => System.IO.File.OpenRead(fileLocation)); post.Files.Add(file); post.Values.Add("token", "bla bla"); post.Values.Add("path", "bla bla"); post.Values.Add("convertAudio", "true"); byte[] bytes = post.GetResponseBytes("https://www.call2all.co.il/ym/api/UploadFile"); MessageBox.Show(System.Text.Encoding.UTF8.GetString(bytes)); }
תשנה את הערכים למה שצריך: בשורות 5, 10, 11.
תוסיף לפקודת כפתור (שלמדת לעשות לפי הדוגמה שהעלית) או למתודת האתחול שבה כתבנו מקודם, קריאה לפונקציה זו:SendFileToYemotHamashiach();
תריץ ותעדכן, ותסביר יותר מתי זה צריך לקרוא ומה גורם לשינוי שגורם לצורך בהעלאה.
פורסם במקור בפורום CODE613 ב02/04/2017 12:02 (+03:00)