Информация об изменениях

Сообщение Re[7]: Оффтоп от 21.10.2024 16:38

Изменено 21.10.2024 16:47 bnk

Re[7]: Оффтоп
Здравствуйте, Shmj, Вы писали:

S>И как: https://telegra.ph/ChatGPT-HttpClient-10-21

S>?

Это тупо неправильный код. Content-Type должен быть multipart/form-data (а не "application/pdf"). WebClient генерит его. Еще, accept header непонятно откуда взялся.
У меня сгенерил чуть получше, но тоже косяк в коде (подставлен "Bearer" хотя согласно исходному коду, его быть не должно). В общем так себе. Хотя то что нет bearer я тоже мог бы прозевать я думаю

async Task<string> UploadFileAsync(string url, string filePath)
{
    using var client = new HttpClient();
    try
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Properties.Settings.Default.ApiKey);
        using var content = new MultipartFormDataContent();
        var fileContent = new ByteArrayContent(await File.ReadAllBytesAsync(filePath));
        fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
        content.Add(fileContent, "file", Path.GetFileName(filePath));

        var response = await client.PostAsync(url, content);
        response.EnsureSuccessStatusCode();
        
        var responseBytes = await response.Content.ReadAsByteArrayAsync();
        return Encoding.UTF8.GetString(responseBytes);
    }
    catch (HttpRequestException)
    {
        return null;
    }
}
Re[7]: Оффтоп
Здравствуйте, Shmj, Вы писали:

S>И как: https://telegra.ph/ChatGPT-HttpClient-10-21

S>?

Это тупо неправильный код. Content-Type должен быть multipart/form-data (а не "application/pdf"). WebClient генерит его в UploadFile. Еще, accept header непонятно откуда взялся.
У меня сгенерил чуть получше, но тоже косяк в коде (подставлен "Bearer" хотя согласно исходному коду, его быть не должно). В общем так себе. Хотя то что нет bearer я тоже мог бы прозевать я думаю

async Task<string> UploadFileAsync(string url, string filePath)
{
    using var client = new HttpClient();
    try
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Properties.Settings.Default.ApiKey);
        using var content = new MultipartFormDataContent();
        var fileContent = new ByteArrayContent(await File.ReadAllBytesAsync(filePath));
        fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
        content.Add(fileContent, "file", Path.GetFileName(filePath));

        var response = await client.PostAsync(url, content);
        response.EnsureSuccessStatusCode();
        
        var responseBytes = await response.Content.ReadAsByteArrayAsync();
        return Encoding.UTF8.GetString(responseBytes);
    }
    catch (HttpRequestException)
    {
        return null;
    }
}