2012-04-03 142 views
10

我想從客戶端上傳文件到服務器。有沒有辦法用SignalR上傳文件,或者我需要一個控制器嗎?ASP.NET MVC - 用SignalR上傳文件

+1

爲什麼你會使用SignalR此,而不僅僅是一個HttpPost到控制器? – drch 2012-04-03 20:19:27

回答

20

SignalR是用於實時消息不上傳文件。

+2

假設我想構建一個可以傳遞給服務器端的組件的流,該組件需要能夠在大型文件中進行搜索,其中客戶端是具有JS File API的瀏覽器。我將以什麼方式以半履行的方式實施? – ehdv 2013-06-26 19:01:53

+0

到webapi端點的流式傳輸將適用於此。事實上,如果它在處理期間通知您的集線器在檢查流時推送到客戶端,則甚至可以實時觸發有關服務器端處理狀態的推送事件。 – Bon 2014-11-26 07:28:25

1

使用文件輸入引導程序插件(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> 
    } 

HUB類代碼

[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; } 
    }