2017-09-24 96 views
0

我已經在某些庫中找到了一些代碼,我已經使用了,我想知道如何從選項中添加自定義標頭如何在粘貼的代碼中添加自定義標題?

。它應該從JS接收本地(Java)的東西。 我不擅長Java。任何幫助,將不勝感激。

這是它來自的存儲庫。 https://github.com/tranquangvu/react-native-uploader/

... 

@ReactMethod 
    public void upload(ReadableMap options, Callback complete) { 

    final Callback completeCallback = complete; 

    try { 
     MultipartBody.Builder mRequestBody = new MultipartBody.Builder() 
       .setType(MultipartBody.FORM); 

     ReadableArray files = options.getArray("files"); 
     String url = options.getString("url"); 
     String method = options.getString("method"); 

     if(options.hasKey("params")){ 
     ReadableMap data = options.getMap("params"); 
     ReadableMapKeySetIterator iterator = data.keySetIterator(); 

     while(iterator.hasNextKey()){ 
      String key = iterator.nextKey(); 
      if(ReadableType.String.equals(data.getType(key))) { 
      mRequestBody.addFormDataPart(key, data.getString(key)); 
      } 
     } 
     } 

     if(files.size() != 0){ 
     for(int fileIndex=0 ; fileIndex<files.size(); fileIndex++){ 
      ReadableMap file = files.getMap(fileIndex); 
      String uri = file.getString("filepath"); 

      Uri file_uri; 
      if(uri.substring(0,10).equals("content://")){ 
      file_uri = Uri.parse(convertMediaUriToPath(Uri.parse(uri))); 
      } 
      else{ 
      file_uri = Uri.parse(uri); 
      } 

      File imageFile = new File(file_uri.getPath()); 

      if(imageFile == null){ 
      Log.d(TAG, "FILE NOT FOUND"); 
      completeCallback.invoke("FILE NOT FOUND", null); 
       return; 
      } 

      String mimeType = "image/png"; 
      if(file.hasKey("filetype")){ 
      mimeType = file.getString("filetype"); 
      } 
      MediaType mediaType = MediaType.parse(mimeType); 
      String fileName = file.getString("filename"); 
      String name = fileName; 
      if(file.hasKey("name")){ 
      name = file.getString("name"); 
      } 


      mRequestBody.addFormDataPart(name, fileName, RequestBody.create(mediaType, imageFile)); 
     } 
     } 

     MultipartBody requestBody = mRequestBody.build(); 
     Request request; 

     // NOTE: The author seems added the header statically, I wonder how can I add a custom header. 

     if(method.equals("PUT")) { 
     request = new Request.Builder() 
       .header("Accept", "application/json") 
       .url(url) 
       .put(requestBody) 
       .build(); 
     } 
     else{ 
     request = new Request.Builder() 
       .header("Accept", "application/json") 
       .url(url) 
       .post(requestBody) 
       .build(); 
     } 

     Response response = client.newCall(request).execute(); 
     if (!response.isSuccessful()) { 
      Log.d(TAG, "Unexpected code" + response); 
      completeCallback.invoke(response, null); 
      return; 
     } 

     completeCallback.invoke(null, response.body().string()); 
    } catch(Exception e) { 
     Log.d(TAG, e.toString()); 
    } 
    } 

回答

1

只是指示okhttp.Request.Builder插入一個更多頭:

request = new Request.Builder() 
    .header("Accept", "application/json") 
    .header("X-example-header", "example-value") 
    .url(url) 
    .put(requestBody) 
    .build(); 

編輯(例如,專門爲那些誰拒絕閱讀的文檔本身):

或者使用這樣的:

Request.Builder builder = new Request.Builder() 
    .header("Accept", "application/json"); 
for(int i = 0; i < 10; i++) { 
    builder.header("X-example-header-" + i, "example-value-" + i) 
} 
request = builder 
    .url(url) 
    .put(requestBody) 
    .build(); 
+0

這將是作者把它staticall相同y,它會如何像params塊一樣完成,'if(options.hasKey(「params」)){'。它增加了循環來添加更多的鍵/值 – olanchuy

相關問題