0

そして、私は次のコードを持っています

self.upload = function (file) {
            var path = $('#fileUpload').val();
           var fr= new FileReader();
            var ID = JSON.stringify({
               ID:23,
               Name: file.name,
               Type: file.type,
               Size: file.size,
               Path: path,
               data:fr.readAsDataURL(file),


            });

            $.ajax({
                cache: false,
                url: "http://localhost:49589/api/files",
                type: "POST",
                dataType: "json",
                data: ID,
                contentType: "application/json; charset=utf-8",
                processData: false,
                success: function (json) {
                            alert("Data Returned: " + JSON.stringify(json));
                        },
                error: function (json) {
                alert("error" + JSON.stringify(json));
            }

            });

ファイルのアップロードを実行しています。そして私のコントローラーは

[HttpPost]
        public string upload(filesUpload f)
        {

            byte[] jj = f.data; // **getting null here** 
            string givenId = f.Path;
            return givenId;

        }

これを実行してファイルをアップロードすると、nullファイルデータが取得されます。filesUpload は私のモデルです

私のコードで何がうまくいかなかったのですか。ビューと drundal SPA フレームワークに Knockout.js を使用しています。

他の方法はありますか?親切に私を助けて

4

1 に答える 1

1

FileReader.readAsDataURLはファイルを非同期的に 読み取り、何も返しません。最初にファイルの読み取りを開始し、次に fr.onload イベントをキャッチし、ここから json オブジェクトを作成して ajax を呼び出す必要があります。

更新:コードは次のようになります。

    self.upload = function (file) {
               var path = $('#fileUpload').val();
               var fr= new FileReader();
               fr.onload = function (frEvent) {
                     var ID = JSON.stringify({
                     ID:23,
                     Name: file.name,
                     Type: file.type,
                     Size: file.size,
                     Path: path,
                     data:frEvent.target.result,
                    });

                    $.ajax({
                      cache: false,
                      url: "http://localhost:49589/api/files",
                      type: "POST",
                      dataType: "json",
                      data: ID,
                      contentType: "application/json; charset=utf-8",
                      processData: false,
                      success: function (json) {
                                alert("Data Returned: " + JSON.stringify(json));
                            },
                      error: function (json) {
                       alert("error" + JSON.stringify(json));
                      }
                    });
                   };
                 fr.readAsDataURL(file);
            };
于 2013-09-20T09:44:44.690 に答える