2016-06-08 5 views
0

Я хотел бы отредактировать изображение, которое находится на FTP-сервере. Я использую SSH.net и вот мой код:Редактировать изображение через MemoryStream (с FTP)

using (var client = new SftpClient(ftpUploadPath, ftpPort, ftpUser, ftpPassword)) 
{ 
    client.Connect(); 
    using (var stream = new MemoryStream()) 
    { 
     client.DownloadFile(fileName, stream); 
     using (var img = Image.FromStream(stream, true)) 
     { 
      img.RotateFlip(RotateFlipType.Rotate90FlipNone); 
      img.Save(stream, ImageFormat.Jpeg); 
      client.UploadFile(stream, fileName); 
     } 
    } 
} 

Все правильно, пока «client.UploadFile», которые стирают изображение на FTP-сервер с помощью 0 октета изображения. Изображение на FTP-сервере - .jpg. Я уже использую «client.UploadFile» с FileStream, и он отлично работает. Но в этом случае я не хочу сохранять файл на своем сервере IIS, изменять его, а затем загружать на FTP-сервер ... Любая идея?

+0

Сброс потока в 0 после сохранения его – noelicus

+1

... и перед сохранением его также, как после чтения изображение будет в конце. В любом случае было бы лучше создать новый поток. –

+0

Огромное спасибо вам обоим! Установка позиции потока на 0 позволила мне сохранить изображение, но без вращения. Сохранение его через новый поток дало мне первый вопрос. Но оба сделали работу :) – Gun

ответ

1
 img.Save(stream, ImageFormat.Jpeg); 

     stream.Position = 0; // Reset the stream to the beginning before switching to reading it 

     client.UploadFile(stream, fileName); 
0

Как я уже говорил выше, благодаря noelicus & Торстен, вот решение:

using (var client = new SftpClient(ftpUploadPath, ftpPort, ftpUser, ftpPassword)) 
{ 
    client.Connect(); 
    using (var stream = new MemoryStream()) 
    { 
     client.DownloadFile(fileName, stream); 
     using (var img = Image.FromStream(stream, true)) 
     { 
      img.RotateFlip(RotateFlipType.Rotate90FlipNone); 

      using (var newStream = new MemoryStream()) 
      { 
       img.Save(newStream, ImageFormat.Jpeg); 
       newStream.Position = 0; 
       client.UploadFile(newStream, item); 
      } 
     } 
    } 
} 
Смежные вопросы