J'ai un pictureBox et un bouton sur le formulaire1. Lorsque le bouton est cliqué, il doit télécharger le fichier sur le serveur. Pour l'instant j'utilise la méthode ci-dessous. Tout d'abord enregistrer l'image localement, puis télécharger sur le serveur:Télécharger l'image vers un serveur à partir de PictureBox
Bitmap bmp = new Bitmap(this.form1.pictureBox1.Width, this.form1.pictureBox1.Height);
Graphics g = Graphics.FromImage(bmp);
Rectangle rect = this.form1.pictureBox1.RectangleToScreen(this.form1.pictureBox1.ClientRectangle);
g.CopyFromScreen(rect.Location, Point.Empty, this.form1.pictureBox1.Size);
g.Dispose();
bmp.Save("filename", ImageFormat.Jpeg);
Et puis télécharger ce fichier:
using (var f = System.IO.File.OpenRead(@"F:\filename.jpg"))
{
HttpClient client = new HttpClient();
var content = new StreamContent(f);
var mpcontent = new MultipartFormDataContent();
content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
mpcontent.Add(content);
client.PostAsync("http://domain.com/upload.php", mpcontent);
}
Je ne peux pas utiliser le type Bitmap dans StreamContent. Comment puis-je diffuser directement l'image à partir de PictureBox plutôt que de l'enregistrer en tant que fichier en premier?
Je suis arrivé avec le code ci-dessous en utilisant MemoryStream, mais la taille du fichier téléchargé est 0 en utilisant cette méthode. Pourquoi?
byte[] data;
using (MemoryStream m = new MemoryStream())
{
bmp.Save(m, ImageFormat.Png);
m.ToArray();
data = new byte[m.Length];
m.Write(data, 0, data.Length);
HttpClient client = new HttpClient();
var content = new StreamContent(m);
var mpcontent = new MultipartFormDataContent();
content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
mpcontent.Add(content, "file", filename + ".png");
HttpResponseMessage response = await client.PostAsync("http://domain.com/upload.php", mpcontent);
//response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync();
MessageBox.Show(body);
}
Enregistrer l'image vers un MemoryStream, puis téléchargez les octets sauvegardant ce MemoryStream. – EricLaw
laissez-moi vérifier, merci – user969068
Je suis désolé, mais je ne pouvais pas comprendre comment enregistrer bmp dans MemoryStream. data = nouvel octet [bmp.NOTSURE]; m.Écrire (données, 0, données.Longueur); – user969068