Advertisement
keselyoleren

Untitled

May 23rd, 2023
770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.46 KB | None | 0 0
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.IO;
  4. using System.Net;
  5. using System.Net.Http;
  6. using System.Net.Http.Headers;
  7. using System.Threading.Tasks;
  8.  
  9. class Program
  10. {
  11.     static async Task Main(string[] args)
  12.     {
  13.         // Console.WriteLine("Masukkan path lengkap file .zip yang ingin diupload:");
  14.         string filePath = "CMU_1.svs";
  15.  
  16.         //Console.WriteLine("Masukkan token keamanan:");
  17.         //string securityToken = Console.ReadLine();
  18.  
  19.         await UploadFile(filePath);
  20.  
  21.         Console.WriteLine("Proses upload selesai.");
  22.         Console.ReadLine();
  23.     }
  24.  
  25.     static async Task UploadFile(string filePath)
  26.     {
  27.         string fileName = Path.GetFileName(filePath);
  28.         long chunkSize = 1024 * 1024; // Ukuran chunk (dalam byte)
  29.        
  30.         string uploadID = "";
  31.         string endPoint = "https://api2.neurabot.ai/api/v2/slides/chunks/";
  32.         string endPointUpload = "https://api2.neurabot.ai/api/v2/slides/upload/";
  33.         string securityToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjg1NDQ4MDU0LCJqdGkiOiJiZDA5MjBlOWExY2U0NmVjYTJlZmQwNzIyNmUyMDQ3MiIsInVzZXJfaWQiOjg1Mn0.oJM7_ugCS1fe4SXHxqjpzhN2lqaZXJNJKw8z5Ncw_Zs";
  34.  
  35.         using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
  36.         {
  37.             using (HttpClient httpClient = new HttpClient())
  38.             {
  39.                 httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Token", securityToken);
  40.  
  41.                 int offset = 0;
  42.                 long fileSize = fileStream.Length;
  43.                 long bytesToRead = fileSize;
  44.                 int numChunks = (int)(fileSize / chunkSize);
  45.                 long remainingBytes = fileSize % chunkSize;
  46.                 Console.WriteLine("File Size : " + fileSize);
  47.                 if (remainingBytes > 0)
  48.                     numChunks++;
  49.  
  50.                 for (int chunkIndex = 0; chunkIndex < numChunks; chunkIndex++)
  51.                 {
  52.                     long currentChunkSize = (chunkIndex == numChunks - 1 && remainingBytes > 0) ? remainingBytes : chunkSize;
  53.                     Console.WriteLine("Current Chunk Size : " + currentChunkSize);
  54.                     byte[] buffer = new byte[currentChunkSize];
  55.                     Console.WriteLine("Offset : " + offset);
  56.                     Console.WriteLine("Buffer : " + buffer.Length);
  57.                     long seek = fileStream.Seek(offset, SeekOrigin.Begin);
  58.                     int bytesRead = fileStream.Read(buffer, 0, (int)currentChunkSize);
  59.                    
  60.  
  61.                     string contentRange = $"bytes {offset}-{offset + (int)currentChunkSize - 1}/{fileSize}";
  62.  
  63.                     ByteArrayContent byteContent = new ByteArrayContent(buffer);
  64.  
  65.                     MultipartFormDataContent formData = new MultipartFormDataContent();
  66.                     formData.Add(byteContent, "the_file", fileName);
  67.                     formData.Headers.Add("Content-Range", contentRange);
  68.                     formData.Headers.Add("X-Requested-With", "XMLHttpRequest");
  69.                    
  70.                     if (chunkIndex > 0)
  71.                     {
  72.                         formData.Add(new StringContent(uploadID), "upload_id");
  73.                     }
  74.  
  75.                     HttpResponseMessage response = await httpClient.PostAsync(endPoint, formData);
  76.                     var responseContent = await response.Content.ReadAsStringAsync();
  77.                     Console.WriteLine($"{responseContent}");
  78.                     var responseObject = JsonConvert.DeserializeObject<dynamic>(responseContent);
  79.                     Console.WriteLine("===============");
  80.  
  81.                     if (response.IsSuccessStatusCode)
  82.                     {
  83.                         if (chunkIndex == 0)
  84.                         {
  85.                             uploadID = responseObject.upload_id;
  86.                         }
  87.                         //offset = Convert.ToInt32(responseObject.offset);
  88.                        
  89.                         bytesToRead -= bytesRead;
  90.  
  91.                         // upload complate chunk
  92.                         Console.WriteLine(uploadID);
  93.                         Console.WriteLine(responseObject);
  94.                         Console.WriteLine($"Chunk {chunkIndex + 1}/{numChunks} berhasil diunggah.");
  95.                     }
  96.                     else
  97.                     {
  98.                         Console.WriteLine(responseObject);
  99.                         Console.WriteLine($"Gagal mengunggah chunk {chunkIndex + 1}/{numChunks}. Status: {response.StatusCode}");
  100.                     }
  101.                     offset += bytesRead;
  102.                 }
  103.  
  104.                 if (uploadID != ""){
  105.                     var payload = new Dictionary<string, object>                    {
  106.                         { "upload_id", $"{uploadID}"},
  107.                         //{"lab_id", 18233} //optional
  108.                        
  109.                     };
  110.                     string jsonPayload = JsonConvert.SerializeObject(payload);
  111.                     HttpContent content = new StringContent(jsonPayload, System.Text.Encoding.UTF8, "application/json");
  112.                     HttpResponseMessage response_upload = await httpClient.PostAsync(endPointUpload, content);
  113.                     var content_response = await response_upload.Content.ReadAsStringAsync();
  114.                     Console.WriteLine(content_response);
  115.  
  116.                 }
  117.             }
  118.         }
  119.     }
  120.  
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement