2012-04-03 24 views
10

ファイルをクライアントからサーバーにアップロードします。 SignalRを使用してファイルをアップロードする方法はありますか?これについてはコントローラが必要ですか?ASP.NET MVC - SignalRを使用してファイルをアップロード

+1

あなたはこれではなく、コントローラにちょうどHttpPostためSignalRを使用するのはなぜ? – drch

答えて

20

SignalRは、ファイルをアップロードしないリアルタイムメッセージング用です。

+2

私は、クライアントがJS File APIを持つブラウザである大きなファイルをシークする機能を必要とする、サーバー側のコンポーネントに渡すことができるストリームを構築したいとします。私はそれを半性能の方法で実装するために何を使用しますか? – ehdv

+0

webapiエンドポイントへのストリーミングポストはうまく動作します。実際には、ストリームを検査している間にクライアントにプッシュするようにハブに通知した場合、処理中に、リアルタイムでサーバー側の処理ステータスに関するプッシュイベントをトリガーすることさえできます。 – Bon

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

ハブクラスコード

[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; } 
    } 
関連する問題