C# HTTP запрос на загрузку картинки через byte[]

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
549
Благодарностей
304
Баллы
63
Помогите написать HTTP запрос на загрузку картинки через byte[]
Метод ZP

Есть метод загрузки картинки через файл
Помогите написать такой же метод, только загрузку картинке через byte[]

C#:
var pathImg = @"C:\Users\Work\Desktop\qwer.png"; //Путь картинки

var userAgent = project.Profile.UserAgent;
var proxy = string.Empty;
var nameImg = Path.GetFileNameWithoutExtension(pathImg);
var rnd = ZennoLab.Macros.TextProcessing.RandomText(16, "dc");

var url = "https://telegra.ph/upload";

var content = $"------WebKitFormBoundary{rnd}\r\n" +
    $"Content-Disposition: form-data; name=\"file\"; filename=\"{nameImg}\"\r\n" +
    $"Content-Type: image/png\r\n\r\n" +
    $"{pathImg}\r\n" +
    $"------WebKitFormBoundary{rnd}--";

var resp = ZennoPoster.HTTP.Request
(
    method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
    UserAgent: userAgent,
    proxy: proxy,
    url: url,
    content: content,
    contentPostingType: $"multipart/form-data; boundary=----WebKitFormBoundary{rnd}",
    Encoding: "utf-8",
    respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    Timeout: 30000,
    UseRedirect: true, MaxRedirectCount: 5,
    AdditionalHeaders: new[] { "Referer: https://telegra.ph/" },
    cookieContainer: project.Profile.CookieContainer
);
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Помогите написать HTTP запрос на загрузку картинки через byte[]
Метод ZP

Есть метод загрузки картинки через файл
Помогите написать такой же метод, только загрузку картинке через byte[]

C#:
var pathImg = @"C:\Users\Work\Desktop\qwer.png"; //Путь картинки

var userAgent = project.Profile.UserAgent;
var proxy = string.Empty;
var nameImg = Path.GetFileNameWithoutExtension(pathImg);
var rnd = ZennoLab.Macros.TextProcessing.RandomText(16, "dc");

var url = "https://telegra.ph/upload";

var content = $"------WebKitFormBoundary{rnd}\r\n" +
    $"Content-Disposition: form-data; name=\"file\"; filename=\"{nameImg}\"\r\n" +
    $"Content-Type: image/png\r\n\r\n" +
    $"{pathImg}\r\n" +
    $"------WebKitFormBoundary{rnd}--";

var resp = ZennoPoster.HTTP.Request
(
    method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
    UserAgent: userAgent,
    proxy: proxy,
    url: url,
    content: content,
    contentPostingType: $"multipart/form-data; boundary=----WebKitFormBoundary{rnd}",
    Encoding: "utf-8",
    respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    Timeout: 30000,
    UseRedirect: true, MaxRedirectCount: 5,
    AdditionalHeaders: new[] { "Referer: https://telegra.ph/" },
    cookieContainer: project.Profile.CookieContainer
);
На сколько я понял, нужно отправить картинку куда-то пост-запросом, а не скачать её.
Пример когда-то давал тут.
 
  • Спасибо
Реакции: Dmitriy Ka и Phoenix78

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
549
Благодарностей
304
Баллы
63
На сколько я понял, нужно отправить картинку куда-то пост-запросом, а не скачать её.
Пример когда-то давал тут.
Что-то не получается
Сделал так
C#:
var urlImg = "https://bipbap.ru/wp-content/uploads/2017/04/000f_7290754.jpg";

var webClient = new WebClient();
var img = webClient.DownloadData(urlImg);  //Получаем byte[] картинки

var reqUrl = "https://telegra.ph/upload";
var rnd = ZennoLab.Macros.TextProcessing.RandomText(16, "d");

var multipart = new MultipartFormDataContent($"boundary=----WebKitFormBoundary{rnd}");
var bytaArrayContent = new ByteArrayContent(img, 0, img.Length);
bytaArrayContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
{
    Name = "file",
    FileName = "image"
};

var httpClient = new HttpClient();
var resp = httpClient.PostAsync(reqUrl, multipart).Result; //Вместо multipart подставлял bytaArrayContent тоже не работает
var result = resp.Content.ReadAsStringAsync().Result;
return result.ToString();
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
549
Благодарностей
304
Баллы
63
Еще дописал
C#:
bytaArrayContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png") { };
Но все равно не работает
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Еще дописал
C#:
bytaArrayContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png") { };
Но все равно не работает
JSON:
[{"src":"\/file\/a511663b4d04da1b0f2a1.jpg"}]
C#:
string url = @"https://zennolab.com/discussion/data/avatars/m/11/11375.jpg?1446968218";

string proxy = "";
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
  method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
  url:url,
  content:"",
  contentPostingType:"",
  proxy:proxy,
  AdditionalHeaders: headers,
  cookieContainer: project.Profile.CookieContainer);

// Убеждаемся что картинка имеет ширину и высоту...
int width = -1;
int height = -1;
using (MemoryStream ms = new MemoryStream(imgbytes)){
  Image img = Image.FromStream(ms);
  width = img.Width;
  height = img.Height;
}

if(width > 0 && height > 0) {
    string fileName = "image.jpg";
    var sBoundary = DateTime.Now.Ticks.ToString("x");
    var content = new MultipartFormDataContent(sBoundary);
    var byteArrayContent = new ByteArrayContent(imgbytes, 0, imgbytes.Length);
        byteArrayContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") {
        Name = "photo",
        FileName = fileName
    };
        content.Add(byteArrayContent, "photo");
       
    byte[] multipart_byte = content.ReadAsByteArrayAsync().Result;
    string contenttype = string.Format("multipart/form-data;boundary={0}", sBoundary);
    string response = ZennoPoster.HTTP.Request(
      method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
      url: @"https://telegra.ph/upload",
      content: multipart_byte, // байты
      contentPostingType: contenttype, 
    //  proxy: proxy,
      Encoding: "UTF-8",
      respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
      Timeout: 30000,
      Cookies: string.Empty,
     // UserAgent: UserAgent,
      UseRedirect: false,
      MaxRedirectCount: 0,
      AdditionalHeaders: new[] { "Referer: https://telegra.ph/" },
      DownloadPath: null,
      UseOriginalUrl: true,
      throwExceptionOnError: true,
    //  cookieContainer: project.Profile.CookieContainer,
      removeDefaultHeaders: true 
    );
    return response;  
   
}
else {
    project.SendInfoToLog("Видимо это не картинка");
}
Прикрепил шаблон, а то мало ли...
У меня все отправилось с первого раза без проблем...
 

Вложения

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
632
Благодарностей
543
Баллы
93
C#:
string urlPic = @"https://bipbap.ru/wp-content/uploads/2017/04/000f_7290754.jpg";
byte[] fileByteArray = ZennoPoster.HTTP.RequestBytes(  method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,  url:urlPic, content:"", contentPostingType:"",  proxy:"",  AdditionalHeaders: new[]{string.Empty});
var content = new MultipartFormDataContent(DateTime.Now.Ticks.ToString("x"));
var byteArrayContent = new ByteArrayContent(fileByteArray, 0, fileByteArray.Length);
    byteArrayContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") {
        Name = "file", FileName = "image" };
content.Add(byteArrayContent, "image");

string uploadUrl = "https://telegra.ph/upload";
var client = new HttpClient();
var response = client.PostAsync(uploadUrl, content).Result;
var result = response.Content.ReadAsStringAsync().Result;
return result.ToString();
 
  • Спасибо
Реакции: Dmitriy Ka, djaga и BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Что-то не получается
Сделал так
C#:
var urlImg = "https://bipbap.ru/wp-content/uploads/2017/04/000f_7290754.jpg";

var webClient = new WebClient();
var img = webClient.DownloadData(urlImg);  //Получаем byte[] картинки

var reqUrl = "https://telegra.ph/upload";
var rnd = ZennoLab.Macros.TextProcessing.RandomText(16, "d");

var multipart = new MultipartFormDataContent($"boundary=----WebKitFormBoundary{rnd}");
var bytaArrayContent = new ByteArrayContent(img, 0, img.Length);
bytaArrayContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
{
    Name = "file",
    FileName = "image"
};

var httpClient = new HttpClient();
var resp = httpClient.PostAsync(reqUrl, multipart).Result; //Вместо multipart подставлял bytaArrayContent тоже не работает
var result = resp.Content.ReadAsStringAsync().Result;
return result.ToString();
Этот код также должен был бы работать.
Но, в нем потерялась строчка - нужно было в multipart добавить данные bytaArrayContent.
Скриншот отличия с кода, который предоставил выше.

97944
 
  • Спасибо
Реакции: Dmitriy Ka и Ilshakin

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
632
Благодарностей
543
Баллы
93
Этот код также должен был бы работать.
Но, в нем потерялась строчка - нужно было в multipart добавить данные bytaArrayContent.
Скриншот отличия с кода, который предоставил выше.

Посмотреть вложение 97944
ТС торопится, наверное ...
в прошлой теме то же упустил перенос строки, бывает ....
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
ТС торопится, наверное ...
в прошлой теме то же упустил перенос строки, бывает ....
Тут дело такое - когда знаешь - тогда все выглядит просто и элементарно.
А когда не знаешь - тогда вроде даже простые штуки выглядят очень сложно.

Есть какая штука как конечные автоматы.
И вроде много информации о том, как они работают.
И описания алгоритма вроде понятное...

Но, когда видишь какую-то такую схему (ниже скриншот добавлю), то как-то совсем не очевидно, как по такой схеме написать код или сделать шаблон.
А кому-то вполне возможно это покажется совсем уж простым и элементарным, а я уже 2 недели пытаюсь осознать как это работает... И вопрос нет кому задать...
97946
 
  • Спасибо
Реакции: djaga

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
549
Благодарностей
304
Баллы
63
Спасибо всем большое, все заработало! Вчера заработался и пропустил строчку кода :-)
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)