none
Загрузка картинки на сервер RRS feed

  • Вопрос

  • Здравствуйте!

    Как в silverlight загружать картинки на сервер копируя их в папку с проектом на сервере? Использую wcf ria services!

    1 апреля 2011 г. 20:09

Ответы

  • Это возможно, это будет нормально.

    public static byte[] ReadFully(Stream input)
    {
      byte[] buffer = new byte[16*1024];
      using (MemoryStream ms = new MemoryStream())
      {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
          ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
      }
    }
    

    (Источник)


    Для связи [mail]
    • Помечено в качестве ответа saiman_OK 9 апреля 2011 г. 14:14
    6 апреля 2011 г. 5:34
    Модератор
  • Например так:

    public ImageSource ConvertByteArrayToImageSource(byte[] bytes)
    {
    	// Declare variables
    	ImageSource result = null;
    
    	// Validate input
    	if (bytes.Length == 0) return null;
    
    	// Create memory stream - it seems that if you clean up or dispose 
    	// the memory stream, you cannot display the image any longer
    	MemoryStream memoryStream = new MemoryStream(bytes);
    
    	// Assign to bitmap image
    	BitmapImage bitmapImage = new BitmapImage();
    	bitmapImage.BeginInit();
    	bitmapImage.StreamSource = memoryStream;
    	bitmapImage.EndInit();
    
    	// Assign bitmap to image source
    	result = bitmapImage;
    
    	// Return result
    	return result;
    }
    
    

     


    Для связи [mail]
    • Помечено в качестве ответа saiman_OK 9 апреля 2011 г. 14:14
    7 апреля 2011 г. 8:14
    Модератор

Все ответы

  • В папку с проектом обычно никто не сохраняет пользовательские файлы. Для этого настраивают отдельную шару (ftp или просто сетевой ресурс), на которую приложение могло бы заливать картинки. Так же можно сделать базу данных, в которой будут храниться картинки и их свойства (название, описание, Blob картинки и т.п.)
    2 апреля 2011 г. 19:44
  • Аналогично вопросу OpenFileDialog получаете поток файла ofd.File.OpenRead() и сохраняете уже куда необходимо.

    Также посмотрите на статью Silverlight File Upload Progress


    Для связи [mail]
    3 апреля 2011 г. 20:30
    Модератор
  • Как этот поток преобразовать в байты для того, что бы занести его в БД?

    Рационально будет занесение таким способом картинки в БД, если это возможно?


    5 апреля 2011 г. 18:26
  • Это возможно, это будет нормально.

    public static byte[] ReadFully(Stream input)
    {
      byte[] buffer = new byte[16*1024];
      using (MemoryStream ms = new MemoryStream())
      {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
          ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
      }
    }
    

    (Источник)


    Для связи [mail]
    • Помечено в качестве ответа saiman_OK 9 апреля 2011 г. 14:14
    6 апреля 2011 г. 5:34
    Модератор
  • Еще один вопрос)

    Как обратно сгенерировать с этого массива поток или что-то еще, что бы получить картинку?

    6 апреля 2011 г. 19:55
  • Например так:

    public ImageSource ConvertByteArrayToImageSource(byte[] bytes)
    {
    	// Declare variables
    	ImageSource result = null;
    
    	// Validate input
    	if (bytes.Length == 0) return null;
    
    	// Create memory stream - it seems that if you clean up or dispose 
    	// the memory stream, you cannot display the image any longer
    	MemoryStream memoryStream = new MemoryStream(bytes);
    
    	// Assign to bitmap image
    	BitmapImage bitmapImage = new BitmapImage();
    	bitmapImage.BeginInit();
    	bitmapImage.StreamSource = memoryStream;
    	bitmapImage.EndInit();
    
    	// Assign bitmap to image source
    	result = bitmapImage;
    
    	// Return result
    	return result;
    }
    
    

     


    Для связи [mail]
    • Помечено в качестве ответа saiman_OK 9 апреля 2011 г. 14:14
    7 апреля 2011 г. 8:14
    Модератор
  • Почему-то не видит метод BeginInit...?

    Пишет : "System.Windows.Media.Imaging.BitmapImage" не содержит определения для "BeginInit" и не был найден метод расширения "BeginInit", принимающий тип "System.Windows.Media.Imaging.BitmapImage" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\saiman\Desktop\SilverlightApplication1\SilverlightApplication1\MainPage.xaml.cs 42 25 SilverlightApplication1

    7 апреля 2011 г. 17:19
  • Да, ошибка. Код для wpf, а не silverlight. Тогда нужно просто заменить

    bitmapImage.BeginInit();
    bitmapImage.StreamSource = memoryStream;
    bitmapImage.EndInit();

    на

    bitmapImage.SetSource(memoryStream);

    Попробуйте так.


    Для связи [mail]
    7 апреля 2011 г. 21:31
    Модератор