C# Как загрузить экран печати на FTP без сохранения на диск - PullRequest
0 голосов
/ 18 апреля 2020

Можно ли загрузить экран печати на FTP, не сохраняя его на своем диске?

В текущем состоянии я сохраняю экран печати на диске "E: \", а затем загружаю на FTP.

Сохранение изображения:

 Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
 Screen.PrimaryScreen.Bounds.Height);
 Graphics graphics = Graphics.FromImage(bitmap as Image);
 graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
 bitmap.Save(@"E:\pic.jpg", ImageFormat.Jpeg);

Загрузка на FTP:

using (var client = new WebClient())
 {
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile("ftp://127.0.0.1/xy.jpg", WebRequestMethods.Ftp.UploadFile, @"E:\pic.jpg");
 }

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете сохранить растровое изображение в MemoryStream, загрузить результат в байтовый массив и записать байтовый массив в поток WebRequest

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/xy.jpg");
request.Method = WebRequestMethods.Ftp.UploadFile;


request.Credentials = new NetworkCredential("username", "password");

byte[] fileContents;
using (MemoryStream sourceStream = new MemoryStream())
{
    Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
        Screen.PrimaryScreen.Bounds.Height);
    Graphics graphics = Graphics.FromImage(bitmap as Image);
    graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
    bitmap.Save(sourceStream, ImageFormat.Jpeg);
    fileContents = sourceStream.ToArray();
}

request.ContentLength = fileContents.Length;

using (Stream requestStream = request.GetRequestStream())
{
    requestStream.Write(fileContents, 0, fileContents.Length);
}

using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
    Console.WriteLine($"Upload File Complete, status {response.StatusDescription}");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...