2012-04-03 3 views
10

Я хочу загрузить файл с клиента на сервер. Есть ли способ загрузить файл с SignalR или мне нужен контроллер для этого?ASP.NET MVC - Загрузить файл с SignalR

+1

Почему бы вам использовать SignalR для этого, а не просто HttpPost к контроллеру? – drch

ответ

20

SignalR предназначен для обмена сообщениями в режиме реального времени, не загружая файлы.

+2

Предположим, я хотел создать поток, который может быть передан компоненту на стороне сервера, который требует возможности поиска в большом файле, где клиент является браузером, который имеет API файлов JS. Что я использовал бы, чтобы реализовать это полу-исполнительным образом? – ehdv

+0

Потоковое сообщение для конечной точки webapi будет прекрасно работать для этого. Фактически, во время обработки он мог даже инициировать push-события в отношении статуса обработки на стороне сервера в реальном времени, если он уведомил ваш концентратор нажать клиенту во время проверки потока. – Bon

1

Этот файл, загружаемый с использованием файла загрузки bootstrap plugin (krajee) Вы также можете загрузить файл без использования этого плагина.

@section Page{ 

    <script src="~/Scripts/bootstrap-switch.min.js"></script> 
    <script src="~/Scripts/Uploader/fileinput.js"></script> 
    <link href="~/Scripts/Uploader/fileinput.css" rel="stylesheet" /> 
    <script> 
     var itemHub = $.connection.ItemHub; 
    $(document).ready(function() { 
     $.connection.hub.start().done(function() { 

      //do any thing 

     }); 
     $("#fileinput").fileinput({ 
      allowedFileExtensions: ["jpg", "png", "gif", "jpeg"], 
      maxImageWidth: 700, 
      maxImageHeight: 700, 
      resizePreference: 'height', 
      maxFileCount: 1, 
      resizeImage: true 
     }); 


     $("#fileinput").on('fileloaded', function (event, file, previewId, index, reader) { 


      var readers = new FileReader(); 
      readers.onloadend = function() { 
       $(".file-preview-image").attr('src', readers.result); 
      } 
      readers.readAsDataURL(file); 
     }); 




     $('#btnSave').click(function() { 
      var imagesJson = $('.file-preview-image').map(function() { 
       var $this = $(this); 
       return { 
        image: $this.attr('src'), 
        filename: $this.attr('data-filename') 
       }; 
      }).toArray(); 

      itemHub.server.getByteArray(imagesJson); 
     }); 
    }); 

    </script> 
    } 

концентратор код класса

[HubName("ItemHub")] 
    public class ItemHub : Hub 
    { 
      public void GetByteArray(IEnumerable<ImageData> images) 
      { 
      foreach (var item in images ?? Enumerable.Empty<ImageData>()) 
      { 
       var tokens = item.Image.Split(','); 
       if (tokens.Length > 1) 
       { 
        byte[] buffer = Convert.FromBase64String(tokens[1]); 

       } 
       } 
      } 
    } 

    public class ImageData 
    { 
     public string Description { get; set; } 
     public string Filename { get; set; } 
     public string Image { get; set; } 
    }