Stefan Oltmann
12/11/2024, 10:04 AMmultipart/related
content type according to
https://developers.google.com/drive/api/guides/manage-uploads#http_1
My code does not work.
How to do this correctly? Did someone manage to upload to that API?
Here's what I got so far:
val response: HttpResponse = httpClient
.post("<https://www.googleapis.com/drive/v3/files?uploadType=multipart>") {
val boundary = "boundary_xyz"
headers {
append(HttpHeaders.ContentType, "multipart/related; boundary=$boundary")
}
setBody(
buildString {
/* Add metadata part */
append("--$boundary\r\n")
append("Content-Type: application/json; charset=UTF-8\r\n\r\n")
append("{")
append("\"name\": \"${path.substringAfterLast("/")}\"")
// folderId?.let { append(", \"parents\": [\"$folderId\"]") }
append("}")
append("\r\n")
/* Add file content part */
append("--$boundary\r\n")
append("Content-Type: application/octet-stream\r\n\r\n")
}.toByteArray() + bytes + "\r\n--$boundary--".toByteArray()
)
}
Returns with
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unable to parse number.\n--boundary_xyz\r\nCont\n^",
"errors": [
{
"message": "Invalid JSON payload received. Unable to parse number.\n--boundary_xyz\r\nCont\n^",
"domain": "global",
"reason": "parseError"
}
],
"status": "INVALID_ARGUMENT"
}
}
Arjan van Wieringen
12/11/2024, 1:37 PM/* Add file content part */
append("--$boundary\r\n")
becomes:
/* Add file content part */
append("\r\n--$boundary\r\n")
Stefan Oltmann
12/11/2024, 1:43 PM{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unable to parse number.\n--boundary_xyz\r\nCont\n^",
"errors": [
{
"message": "Invalid JSON payload received. Unable to parse number.\n--boundary_xyz\r\nCont\n^",
"domain": "global",
"reason": "parseError"
}
],
"status": "INVALID_ARGUMENT"
}
}
Stefan Oltmann
12/11/2024, 1:43 PMStefan Oltmann
12/11/2024, 1:44 PMArjan van Wieringen
12/11/2024, 1:47 PMStefan Oltmann
12/11/2024, 1:48 PMArjan van Wieringen
12/11/2024, 1:52 PMArjan van Wieringen
12/11/2024, 1:53 PMStefan Oltmann
12/11/2024, 1:54 PMArjan van Wieringen
12/11/2024, 1:55 PMStefan Oltmann
12/11/2024, 2:23 PM{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unable to parse number.\n--xxxxxxxxx\nContent-\n^",
"errors": [
{
"message": "Invalid JSON payload received. Unable to parse number.\n--xxxxxxxxx\nContent-\n^",
"domain": "global",
"reason": "parseError"
}
],
"status": "INVALID_ARGUMENT"
}
}
Stefan Oltmann
12/11/2024, 2:27 PMArjan van Wieringen
12/11/2024, 3:09 PMStefan Oltmann
12/11/2024, 3:14 PMArjan van Wieringen
12/11/2024, 3:33 PMStefan Oltmann
12/11/2024, 3:44 PMStefan Oltmann
12/16/2024, 4:30 PMmultipart/related
request with Ktor in a way that the Google Drive API will accept.
POST <https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart>
Authorization: Bearer myAccessToken
Content-Type: multipart/related; boundary=xxxxxxxxx
--xxxxxxxxx
Content-Type: application/json; charset=UTF-8
{
"name": "photo_19.xmp"
}
--xxxxxxxxx
Content-Type: application/octet-stream
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Ashampoo XMP Core 1.4.2">
<rdf:RDF xmlns:rdf="<http://www.w3.org/1999/02/22-rdf-syntax-ns#>">
<rdf:Description rdf:about=""
xmlns:xmp="<http://ns.adobe.com/xap/1.0/>"
xmp:Rating="3"/>
</rdf:RDF>
</x:xmpmeta>
--xxxxxxxxx--
Arjan van Wieringen
12/16/2024, 4:39 PMAleksei Tirman [JB]
12/16/2024, 4:40 PMStefan Oltmann
12/16/2024, 4:40 PMStefan Oltmann
12/16/2024, 4:40 PMCan you intercept the network requests with a traffic analyzing tool to compare both requests?Which one?
Aleksei Tirman [JB]
12/16/2024, 4:40 PMStefan Oltmann
12/16/2024, 4:42 PMAleksei Tirman [JB]
12/16/2024, 4:42 PMStefan Oltmann
12/16/2024, 4:43 PMStefan Oltmann
12/16/2024, 4:44 PMYes, WireSharkI assumed that there may be better tools around than this and you might have an recommendation. I would not be suprised if that's also an IDEA Ultimate feature 😄
Stefan Oltmann
12/16/2024, 4:46 PMAleksei Tirman [JB]
12/16/2024, 4:57 PMStefan Oltmann
12/17/2024, 8:57 AMArjan van Wieringen
12/17/2024, 11:18 AMArjan van Wieringen
12/17/2024, 11:19 AMStefan Oltmann
12/17/2024, 12:19 PM