# Upload attachment not working | API

**URL:** <https://forum.katalon.com/t/upload-attachment-not-working-api/47699>\
**Category:** API Testing\
**Tags:** api-testing, katalon-studio\
**Created:** [September 24, 2020, 7:54pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699 "2020-09-24T19:54:31Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 24, 2020, 7:54pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/1 "2020-09-24T19:54:31Z")

</div>

Upload formdata is not working

 ![image](https://europe1.discourse-cdn.com/katalon/original/2X/a/a7918e85cc4774ffaee15873acfba8387f1fb3ff.png)  
Headers as  
 ![image](https://europe1.discourse-cdn.com/katalon/original/2X/a/a9331a665b7f5fab09287faf829c827501c0971d.png)

---

<div class="post-metadata">

**Author:** ![susana.maria.repeto](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/susana.maria.repeto/32/16103_2.png) [@susana.maria.repeto](https://forum.katalon.com/u/susana.maria.repeto)\
**Post date:** [September 25, 2020, 7:26am UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/2 "2020-09-25T07:26:54Z")

</div>

Hi!

That’s an issue I have also recently experienced. The only solution that worked for me is on this thread: [Upload File API](http://forum.katalon.com/t/upload-file-using-rest-api/47252/2)

But it seems you’re missing something in your request, the Borrower Data. You should send it also in the form-data as a parameter I guess.  
Try that.

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 25, 2020, 1:24pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/3 "2020-09-25T13:24:27Z")

</div>

Thanks Susana, Let me try that link solution and update you,  
Well the borrower data is nothing already passing formdata (with same parameters its working in postman) @susana.maria.repeto Did you make it work at Object repository or in TestScript ? (sorry for being naive on this) 🙂

---

<div class="post-metadata">

**Author:** ![susana.maria.repeto](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/susana.maria.repeto/32/16103_2.png) [@susana.maria.repeto](https://forum.katalon.com/u/susana.maria.repeto)\
**Post date:** [September 25, 2020, 1:32pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/4 "2020-09-25T13:32:59Z")

</div>

If it’s working on postman I can tell you for sure it’s going to work in Katalon, but maybe you’ll have to make your own code like me.  
tip: check the headers generated in Postman, the will give you a hint

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 25, 2020, 1:39pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/5 "2020-09-25T13:39:29Z")

</div>

Yep copied all headers 🙂 but yes the code might work… thanks again

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 25, 2020, 4:04pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/6 "2020-09-25T16:04:55Z")

</div>

Hi @susana.maria.repeto  
after importing okhttp 4.9.0 jar, restarted the katalon.I am getting this error in my test script

```auto
 @ line 17, column 1.
   import com.squareup.okhttp 

```

commenting the above i am getting

```auto
unable to resolve class OkHttpClient 
 @ line 24, column 14.
   OkHttpClient client = new OkHttpClient().newBuilder()

```

what is missing ? any way-around

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 25, 2020, 4:25pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/7 "2020-09-25T16:25:20Z")

</div>

> [@gsp](#):
>
> unable to resolve class OkHttpClient

Got resolved by importing the above class 🙂 silly

Now facing another error

```auto
unable to resolve class MediaType 
   MediaType mediaType = MediaType.parse("multipart/form-data");

```

have to import this too ?

---

<div class="post-metadata">

**Author:** ![susana.maria.repeto](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/susana.maria.repeto/32/16103_2.png) [@susana.maria.repeto](https://forum.katalon.com/u/susana.maria.repeto)\
**Post date:** [September 25, 2020, 4:28pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/8 "2020-09-25T16:28:49Z")

</div>

Uhm I don’t have my code in front of me right now, so I’m not 100% sure but I think I didn’t use an external library, you can simple put this on your script imports:

```auto
import okhttp3.*;

```

A little later I can check if that doesn’t work!

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 25, 2020, 4:32pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/9 "2020-09-25T16:32:30Z")

</div>

yes imported okhttp3.\* works for previous issue. Sure no worries let me know later. thanks

---

<div class="post-metadata">

**Author:** ![susana.maria.repeto](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/susana.maria.repeto/32/16103_2.png) [@susana.maria.repeto](https://forum.katalon.com/u/susana.maria.repeto)\
**Post date:** [September 25, 2020, 6:59pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/10 "2020-09-25T18:59:36Z")

</div>

Okay here I am again.  
MediaType is from okhttp so if you put the line I posted above it would work. I think Katalon itself has some library with the same Object, make sure it is not taking the wrong one.

But let me ask you a question, because maybe we are going by the long route with this code and it can be done easier than that. What kind of file do you want to upload? (PDF, XML, .jpg…) and what’s the purpose?

Katalon also provides some classes to create API requests in scripting mode (not ObjectRepository). I gave you the code that uses OkHttp because once again, Katalon didn’t work with its own classes, at least for me.  
Try also this code that is simpler, maybe it will work for you (of course you’ll have to change headers to match yours):

```auto
TestObjectProperty contentTypeHeader = new TestObjectProperty("Content-Type", ConditionType.EQUALS, "multipart/form-data")
	basicAuthHeader = new TestObjectProperty("Authorization",ConditionType.EQUALS, "Basic myBase64token")
	defaultHeaders = Arrays.asList(cookieHeader, contentTypeHeader)

	RequestObject ro = new RestRequestObjectBuilder()
			.withRestUrl(importTestExecJUnitEndpoint)
			.withHttpHeaders(defaultHeaders)
			.withRestRequestMethod("POST")
			.withMultipartFormDataBodyContent([new FormDataBodyParameter('afile',filePath,'PARAM_TYPE_FILE')])
			.build()

	ResponseObject respObj = WS.sendRequest(ro)

```

You should also check this link that explains much better than me the WS scripting [API requests mannualy](https://docs.katalon.com/katalon-studio/docs/create_rest_api_requests_manually.html#requestobject-and-responseobject)  
Let me know!

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 25, 2020, 7:18pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/11 "2020-09-25T19:18:28Z")

</div>

> [@susana.maria.repeto](#):
>
> What kind of file do you want to upload? (PDF, XML, .jpg…) and what’s the purpose?

I am currently sending .txt (but lately .jpg . jpeg, .tiff , .xls will come in my tea case 🙂 ) It basically do some selfsigned docs need for approval for same Itemid iam passing along with.

Thanks for your reply … Will surely update on its working

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 28, 2020, 5:14pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/12 "2020-09-28T17:14:00Z")

</div>

Hi No Sucess on this

i use both codes separately in the tests it did get passed without any failure. But when check the HAR file for response get same “405” error like i am getting in Object repository

 ![image](https://europe1.discourse-cdn.com/katalon/original/2X/7/7fc544a16f4a63c3fa21b30f84ffe706c12e8303.png)  
TestCase  
 ![image](https://europe1.discourse-cdn.com/katalon/original/2X/d/d9be3c01ace66e00cb1f6ea30614abcb9d4c6308.png)  
Har file

```auto
"response" : {
        "status" : 415,
        "statusText" : "",
        "httpVersion" : "",
        "cookies" : [],
        "headers" : [ {
          "name" : "Transfer-Encoding",
          "value" : "chunked"
        },

```

**Postman Request** works fine

 ![image](https://europe1.discourse-cdn.com/katalon/original/2X/e/e751bbf2129853a3ae628321939b8eb686311138.png)

---

<div class="post-metadata">

**Author:** ![susana.maria.repeto](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/susana.maria.repeto/32/16103_2.png) [@susana.maria.repeto](https://forum.katalon.com/u/susana.maria.repeto)\
**Post date:** [September 29, 2020, 7:13am UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/13 "2020-09-29T07:13:30Z")

</div>

Hi!!

415 error typically is related to the media type you’re trying to upload, that is not supported.  
Can you please post your full code and also the full HAR file?

Cheers!

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 29, 2020, 8:24pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/14 "2020-09-29T20:24:04Z")

</div>

Test Script Code is (this

```auto
WS.sendRequest(findTestObject('TPO/TPO - Upload Document', [('RESOURCE_PREFIX_TPO') : GlobalVariable.RESOURCE_PREFIX_TPO
            , ('ACCESS_TOKEN') : GlobalVariable.ACCESS_TOKEN, 

public void importJUnitTestExecRequest()
{
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("multipart/form-data;");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("loanguid", "33384d20-1597-43d8-8d56-164f9f630097")
  .addFormDataPart("file","/C:/Users/pathtoupload/qaauto-tpo/test.txt",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/C:/pathtoupload/test.txt")))
  .addFormDataPart("documentName", "underwriting")
  .addFormDataPart("documentType", "FHA")
  .addFormDataPart("applicationid", "ALL")
  .build();
Request request = new Request.Builder()
  .url("MyURL/attachment")
  .method("POST", body)
  .addHeader("Authorization", "Bearer ${ACCESS_TOKEN}")
  .addHeader("Content-Type", "multipart/form-data; boundary=<calculated when request is sent>")
  .addHeader("Accept-Encoding", "gzip, deflate, br")
  .addHeader("Content-Length", "calculated when request is sent>")
  .addHeader("Accept", "*/*")
  .build();
  
//Response response = client.newCall(request).execute();
//println("Response status: " + response);
//String responseBody = response.body().string();
//println(" ************IMPORT TEST EXECUTION RESULTS RESPONSE BODY************");
//println(responseBody);
//println(" *********************************************************************");
//def slurper = new groovy.json.JsonSlurper()
//def result = slurper.parseText(response.getResponseBodyContent())
//println(result)
	Response response = null;
//
	try {
		response = client.newCall(request).execute();
		println(" ************IMPORT TEST EXECUTION RESULTS RAW RESPONSE************");
		println("Response status: " + response);
		println(" ********************************************************************");
		if (response.isSuccessful()){
			String responseBody = response.body().string();
			println(" ************IMPORT TEST EXECUTION RESULTS RESPONSE BODY************");
			println(responseBody);
			println(" *********************************************************************");
		} else {
			throw new IOException("Unexpected HTTP code " + response);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
}

```

HAR file: Please check your inbox, shared already. Thanks

---

<div class="post-metadata">

**Author:** ![Russ\_Thomas](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/russ_thomas/32/11884_2.png) [@Russ\_Thomas](https://forum.katalon.com/u/Russ_Thomas)\
**Post date:** [September 29, 2020, 9:19pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/15 "2020-09-29T21:19:15Z")

</div>

@duyluong @ThanhTo Can you add some wisdom here please?

---

<div class="post-metadata">

**Author:** ![ThanhTo](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/thanhto/32/697_2.png) [@ThanhTo](https://forum.katalon.com/u/ThanhTo)\
**Post date:** [September 30, 2020, 3:16am UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/16 "2020-09-30T03:16:40Z")

</div>

Assigned @huynguyen on September 30, 2020, 3:16am UTC



---

<div class="post-metadata">

**Author:** ![ThanhTo](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/thanhto/32/697_2.png) [@ThanhTo](https://forum.katalon.com/u/ThanhTo)\
**Post date:** [September 30, 2020, 3:17am UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/17 "2020-09-30T03:17:35Z")

</div>

Not the most well-versed in API, so I’ll tag someone who knows more about this @huynguyen

---

<div class="post-metadata">

**Author:** ![susana.maria.repeto](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/susana.maria.repeto/32/16103_2.png) [@susana.maria.repeto](https://forum.katalon.com/u/susana.maria.repeto)\
**Post date:** [September 30, 2020, 6:52am UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/18 "2020-09-30T06:52:03Z")

</div>

Hello!

Okay I’m not sure about anything anymore 😂 but try this. I’ve changed the following:

- You don’t need to put /C:/… you can just simply do C:/ or even C:\…
- Deleted the MediaType mediaType = MediaType.parse(“multipart/form-data;”), you don’t need it
- MediaType.parse needs “application/text”, because you’re uploading a txt
- You can try deleting some of the headers, and try deleting the boundary also, I didn’t need it.
- I am also still concerned about the response that says Borrower data, I really thing you need to pass it into the body request.

```auto
WS.sendRequest(findTestObject('TPO/TPO - Upload Document', [('RESOURCE_PREFIX_TPO') : GlobalVariable.RESOURCE_PREFIX_TPO, ('ACCESS_TOKEN') : GlobalVariable.ACCESS_TOKEN, 

public void importJUnitTestExecRequest() {
OkHttpClient client = new OkHttpClient();

RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("loanguid", "33384d20-1597-43d8-8d56-164f9f630097")
  .addFormDataPart("file","C:/Users/pathtoupload/qaauto-tpo/test.txt", RequestBody.create(MediaType.parse("application/text"), new File("C:/pathtoupload/test.txt"))) 
  .addFormDataPart("documentName", "underwriting")
  .addFormDataPart("documentType", "FHA")
  .addFormDataPart("applicationid", "ALL")
  .build();
  
Request request = new Request.Builder()
  .url("MyURL/attachment")
  .post(body)
  .addHeader("Authorization", "Bearer ${ACCESS_TOKEN}")
  .addHeader("Content-Type", "multipart/form-data")
  .build();
  
//Response response = client.newCall(request).execute();
//println("Response status: " + response);
//String responseBody = response.body().string();
//println(" ************IMPORT TEST EXECUTION RESULTS RESPONSE BODY************");
//println(responseBody);
//println(" *********************************************************************");
//def slurper = new groovy.json.JsonSlurper()
//def result = slurper.parseText(response.getResponseBodyContent())
//println(result)
	Response response = null;
//
	try {
		response = client.newCall(request).execute();
		println(" ************IMPORT TEST EXECUTION RESULTS RAW RESPONSE************");
		println("Response status: " + response);
		println(" ********************************************************************");
		if (response.isSuccessful()){
			String responseBody = response.body().string();
			println(" ************IMPORT TEST EXECUTION RESULTS RESPONSE BODY************");
			println(responseBody);
			println(" *********************************************************************");
		} else {
			throw new IOException("Unexpected HTTP code " + response);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
}

```

Hope it works!!

---

<div class="post-metadata">

**Author:** ![huynguyen](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/huynguyen/32/552_2.png) [@huynguyen](https://forum.katalon.com/u/huynguyen)\
**Post date:** [September 30, 2020, 4:50pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/19 "2020-09-30T16:50:30Z")

</div>

Hi @gsp,  
Please send the whole HAR file for investigation.

---

<div class="post-metadata">

**Author:** ![gsp](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/gsp/32/20464_2.png) [@gsp](https://forum.katalon.com/u/gsp)\
**Post date:** [September 30, 2020, 5:49pm UTC](https://forum.katalon.com/t/upload-attachment-not-working-api/47699/20 "2020-09-30T17:49:38Z")

</div>

Hi Pls check inbox, HAR file shared too, Susana is having the same 🙂

[Next page](https://forum.katalon.com/t/upload-attachment-not-working-api/47699.md?page=2)
