2017-08-13 39 views
0

我要上传文件到这个API https://support.crowdin.com/api/add-file/如何使用restsharp上传多个文件?

如何创建一个名为files参数和使用RestSharp添加多个文件呢?

我写了这段代码到目前为止,但它不起作用,RestSharp似乎没有按预期上传文件。

 var addUrl = new Uri($"https://api.crowdin.com/api/project/{projectIdentifier}/add-file?key={projectKey}&json="); 


     var restClient = new RestSharp.RestClient("https://api.crowdin.com"); 
     var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST); 
     request.AlwaysMultipartFormData = true; 

     request.AddQueryParameter("key", projectKey); 
     request.AddQueryParameter("json", ""); 

     var files = new Dictionary<string, byte[]> 
     { 
      { "testfile", File.ReadAllBytes(fileName) } 
     }; 
     request.AddParameter("files", files, RestSharp.ParameterType.RequestBody); 

     var restResponse = restClient.Execute(request); 

这给了我

{ 
    "success":false, 
    "error":{ 
    "code":4, 
    "message":"No files specified in request" 
    } 
} 
+0

@SirRufo您链接的问题是关于添加单个文件。这个问题是关于添加一个文件数组,这不是直截了当的。 – riki

+0

有一个用于添加两个文件的示例的答案(6 upvotes)。 –

+0

答案是将两个文件直接添加到请求中,而我的情况更复杂。我必须将多个文件添加到名为“files”的“数组”中。 (所以我需要控制数组名称)。 – riki

回答

2

@SirRufo在评论中提到的解决方案,但没有张贴它作为一个soltion,所以在这里我要解释一下。

http POST方法实际上没有数组的概念。 而是在字段名称中加上方括号只是一个约定。

此示例代码工作:

 var restClient = new RestSharp.RestClient("https://api.crowdin.com"); 
     var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST); 
     request.AlwaysMultipartFormData = true; 
     request.AddHeader("Content-Type", "multipart/form-data"); 

     request.AddQueryParameter("key", projectKey); 
     request.AddQueryParameter("json", ""); 

     request.AddFile("files[testfile1.pot]", fileName); 
     request.AddFile("files[testfile2.pot]", fileName); 

     // Just Execute(...) is missing ... 

无需窝自定义参数或任何复杂的那样。 使用这种“特殊”名称格式添加文件是它所需要的。

我的错误是认为files[filenamehere.txt]部分意味着比实际需要更复杂的POST机构。