using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
namespace AGC_Management.Services
{
public class ImgurUploadService
{
public async Task<string> UploadImage(Byte[] imageData)
{
string base64Image = Convert.ToBase64String(imageData);
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.imgur.com/3/upload");
httpWebRequest.Headers.Add("Authorization", "Client-ID " + BotConfig.GetConfig()["ImgurAPI"]["ImgurClientID"]);
httpWebRequest.Method = "POST";
await using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
//string json = "{\"image\":\"" + base64Image + "\"}";
string json = "{\"image\":\"" + base64Image + "\",\"type\":\"base64\"}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
return JObject.Parse(responseText)["data"]["id"].ToString();
}
}
public async Task<string> CreateAlbum(List<string> imageIds)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.imgur.com/3/album");
httpWebRequest.Headers.Add("Authorization", "Client-ID " + BotConfig.GetConfig()["ImgurAPI"]["ImgurClientID"]);
httpWebRequest.Method = "POST";
await using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\" ids\":" + JsonConvert.SerializeObject(imageIds) + "}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
return JObject.Parse(responseText)["data"]["id"].ToString();
}
}
}
}
[Command("imgurtest")]
public async Task ImgurTest(CommandContext ctx, string reason)
{
var imgExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
var imgAttachments = ctx.Message.Attachments
.Where(att => imgExtensions.Contains(Path.GetExtension(att.FileName).ToLower()))
.ToList();
string imgurUrl = "";
if (imgAttachments.Count > 0)
{
List<string> imageIds = new();
var uploader = new ImgurUploadService();
foreach (var item in imgAttachments)
{
byte[] imageBytes;
using (var webClient = new HttpClient())
{
imageBytes = await webClient.GetByteArrayAsync(item.Url);
}
String imageId = await uploader.UploadImage(imageBytes);
imageIds.Add(imageId);
}
var album = await uploader.CreateAlbum(imageIds);
imgurUrl = $" http://imgur.com/a/{album}";
}
await ctx.RespondAsync($"{reason}{imgurUrl}");
}
I try to upload things to Imgur via a Discord Command written in C# I only get 400 Bad Request from Imgur
Here's what I've tried so far:
Registered my application on the Imgur website and obtained the client ID and client secret. Used the Imgur API endpoint (https://api.imgur.com/3/image) along with the necessary parameters and headers in my C# code. Attempted different HTTP libraries (e.g., HttpClient, WebClient) to perform the POST request to upload an image, but no luck.
The Client ID is also corrent
I expect that the upload gives me a Image ID back that i can add to an album