2017-01-31 28 views
1

私はこれを動作させようとしてきましたが、役に立たなかった。マルチパートボディの長さの制限が16384を超えました

私がやっていることは、JQuery AJAXを使用してFormDataイメージと添付ファイルのセットをアップロードすることです。私はエラーを取得しておく

:ここでは誰もが私を助けるかの方向に私を指すことができる場合 Multipart body length limit exceeded exception

を「マルチパートボディの長さの制限を16384を超え、」私はここSO上の他の同様の質問を見つけましたそれは非常に高く評価されます。 。。私も追加

let data = new FormData(); 
    data.enctype = "multipart/form-data"; 
    let file = $("#imgItem_image-upload-file")[0].files[0]; 

    data.append("image|" + file.name, file); //Works fine if alone. 

    //Does not work, causes error on server side. 
    for (var i = 0; i < objItem.Attachments[0].length; i++) { 
     let attFile = objItem.Attachments[0][i].File; 
     console.log(attFile); 
     data.append("attachment|" + attFile.name, attFile); 
    } 

    data.append("Category", objItem.Category); 
    data.append("NewCategory", objItem.NewCategory); 
    data.append("Name", objItem.Name); 
    data.append("IdentificationType", objItem.IdentificationType); 
    data.append("SerialNumber", objItem.SerialNumber); 
    data.append("IMEI", objItem.IMEI); 
    data.append("EngineNumber", objItem.EngineNumber); 
    data.append("MASNumber", objItem.MASNumber); 
    data.append("NumberPlate", objItem.NumberPlate); 
    data.append("VINNumber", objItem.VINNumber); 
    data.append("Description", objItem.Description); 
    $.ajax({ 
     url: "http://localhost:7001/api/AddPersonalItem", 
     type: "POST", 
     data: data, 
     //dataType: "json", 
     //headers: { 'Content-Type': false }, 
     //contentType: false, 
     contentType: false, //'multipart/form-data' 
     processData: false, 
     // headers: { 
     //  'Accept': 'application/json', 
     //  'Content-Type': 'application/json' 
     // }, 
     success: function (response) { 

     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log(textStatus, errorThrown); 
     } 
    }); 

:それは私の側にはほとんど真夜中だ、と私は:(を放棄しようと思い、私はASP.NETのコアを使用しています

1.1ここで

は私のjavascriptのですこの私のStartup.jsファイルに:

 public ServiceCallResponse AddPersonalItem() 
     { 
      ItemObject io = new ItemObject(); 
      io.Attachments = new List<Attachment>(); 
      io.Image = new Image(); 

      //Get files. 
      foreach (IFormFile file in Request.Form.Files) 
      { 
       //The file name also states what type of object this is. 
       string type = file.Name.Split('|')[0]; 
       string name = file.Name.Split('|')[1]; 

       StreamReader reader = new StreamReader(file.OpenReadStream()); 
       byte[] bytes = Encoding.Unicode.GetBytes(reader.ReadToEnd()); 
       string base64 = Convert.ToBase64String(bytes); 

       switch (type.ToLower().Trim()) 
       { 
        case "attachment": 
         Attachment a = new Attachment(); 
         a.Name = name; 
         a.Base64 = base64; 

         io.Attachments.Add(a); 
         break; 
        case "image": 
         io.Image.Name = name; 
         io.Image.Base64 = base64; 
         break; 
       } 
      } 
     } 

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddMvc(); 

     //Multipart 
     services.Configure<FormOptions>(x => 
     { 
      x.MultipartBodyLengthLimit = 60000000; 
     }); 
    } 

そして、ここに私のAPIは、コントローラのコードです

マルチパートのボディの長さを増やした後も、まったく同じエラーが表示されます。

エラーがで発生します。

foreach (IFormFile file in Request.Form.Files)

私は十分に明確ではないです場合はN本、尋ねると、私はellaborateしようとするでしょうしてください! :)

+1

...私は本当にこの上で.NETのコアを使用したいが、私は、私は22日とカウントした後...私のサービスのためにWCFに切り替える必要があると考え始めています –

+0

https://github.com/ aspnet/Mvc/issues/5128 –

+1

私は最終的に.NET Coreを削除し、ASP.NET API 2でこれをやりました。私はまだ.NET Coreがそのデフォルトよりも大きなファイルを許可する方法を考え出していません。私が試したすべてのリンクは単に機能しません。API 2は100%正常に機能します - 私は今、Windowsホスティング環境が必要です... –

答えて

0

また、値の長さの制限を大きくする必要があります。デフォルトは4MBです。

   services.Configure<FormOptions>(options => 
       { 
        options.ValueCountLimit = 10; //default 1024 
        options.ValueLengthLimit = int.MaxValue; //not recommended value 
        options.MultipartBodyLengthLimit = long.MaxValue; //not recommended value 
       }); 
1

私の場合、解決策はMemoryBufferThresholdを増やすことでした。

services.Configure<FormOptions>(options => 
{ 
    options.MemoryBufferThreshold = Int32.MaxValue; 
}); 
0

私は例外を持って、私は私のクライアントが正しくないHTTPヘッダー「コンテンツタイプ」を持っていたことが分かりました。 このを失敗しました::

例カールで:-) 間違った入力タイプでカールを使用してがテキストとしてPOSTボディにファイル全体を送信しようとしたカールではなく、偉大な動き

curl --request POST \ 
    --url https://stuff.net/api/storage \ 
    --header 'authorization: bearer MY_ACCESS_TOKEN' \ 
    --header 'cache-control: no-cache' \ 
    --form MyfileName=b72871d79c81 \ 
    --form [email protected] \ 
    --form MyfileId=9401c94db46c 
0123:この
curl --request POST \ 
    --url https://stuff.net/api/storage \ 
    --header 'authorization: bearer MY_ACCESS_TOKEN' \ 
    --header 'cache-control: no-cache' \ 
    --header 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ 
    --form MyfileName=b72871d79c81 \ 
    --form [email protected] \ 
    --form MyfileId=9401c94db46c 

を働きました

関連する問題