# Parsing multipart data using HTTP.jl

**URL:** https://discourse.julialang.org/t/parsing-multipart-data-using-http-jl/55540
**Category:** New to Julia
**Created:** [February 18, 2021, 1:35pm UTC](https://discourse.julialang.org/t/parsing-multipart-data-using-http-jl/55540 "2021-02-18T13:35:07Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![Michal](https://avatars.discourse-cdn.com/v4/letter/m/34f0e0/32.png) [@Michal](https://discourse.julialang.org/u/Michal)
#### Post date: [February 18, 2021, 1:35pm UTC](https://discourse.julialang.org/t/parsing-multipart-data-using-http-jl/55540/1 "2021-02-18T13:35:07Z")

</div>

I’m looking for standard function which can parse body from multipart request. I received json and csv in one multipart request. How can I parse it?

Following example is received in one multipart request. Body received from request converted to string:

```julia
-----------------------------2469282126307371221439455
Content-Disposition: form-data; name="configuration"
Content-Type: application/csv

{
  "attribute1": "value1",
  "attribute2": "value2",
  "attribute3": "value3"
}
-----------------------------2469282126307371221439455
Content-Disposition: form-data; name="file"; filename="Vieden.csv"
Content-Type: text/csv

date;value1;value2
2004-01-01 00:00:00;8;2
2004-01-01 01:00:00;7;5
2004-01-01 02:00:00;2;4

-----------------------------2469282126307371221439455--

```

---

<div class="post-metadata">

### Author: ![pixel27](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pixel27/32/8902_2.png) [@pixel27](https://discourse.julialang.org/u/pixel27)
#### Post date: [February 18, 2021, 2:58pm UTC](https://discourse.julialang.org/t/parsing-multipart-data-using-http-jl/55540/2 "2021-02-18T14:58:29Z")

</div>

Call `HTTP.parse_multipart_form` on the content. That should parse it into an array so you can get the name, contenttype, filename, and data.

---

<div class="post-metadata">

### Author: ![Michal](https://avatars.discourse-cdn.com/v4/letter/m/34f0e0/32.png) [@Michal](https://discourse.julialang.org/u/Michal)
#### Post date: [February 19, 2021, 9:20am UTC](https://discourse.julialang.org/t/parsing-multipart-data-using-http-jl/55540/3 "2021-02-19T09:20:56Z")

</div>

Thank you so much for your advice. It looks it will work, but I’ve been not able to read content of this multipart array. How can I do that? How can I get data of multipart?

I tried following:

```julia
println(HTTP.parse_multipart_form(req)[2].data)

```

```julia
┌ Error: error handling request
│ exception =
│ ArgumentError: ensureroom failed, IOBuffer is not writeable
│ Stacktrace:
│ [1] ensureroom_slowpath(::Base.GenericIOBuffer{SubArray{UInt8,1,Array{UInt8,1},Tuple{UnitRange{Int64}},true}}, ::UInt64) at ./iobuffer.jl:303
│ [2] ensureroom at ./iobuffer.jl:325 [inlined]
│ [3] write at ./iobuffer.jl:446 [inlined]

```

Another output was:

```julia
println(HTTP.parse_multipart_form(req))

```

```julia
HTTP.Multipart[
    HTTP.Multipart(data=::Base.GenericIOBuffer{
    SubArray{UInt8,1,Array{UInt8,1},
    Tuple{UnitRange{Int64}},true}},
    contenttype="text/plain",
    contenttransferencoding="")),

    HTTP.Multipart(filename="File.csv",
    data=::Base.GenericIOBuffer{SubArray{UInt8,1,Array{UInt8,1},
    Tuple{UnitRange{Int64}},true}},
    contenttype="text/csv", contenttransferencoding=""))
]

```

---

<div class="post-metadata">

### Author: ![Michal](https://avatars.discourse-cdn.com/v4/letter/m/34f0e0/32.png) [@Michal](https://discourse.julialang.org/u/Michal)
#### Post date: [February 19, 2021, 9:42am UTC](https://discourse.julialang.org/t/parsing-multipart-data-using-http-jl/55540/4 "2021-02-19T09:42:30Z")

</div>

Again, thank you very much. It is elegant solution. Finally, you can ignore previous message, I solved it:

```julia
println(String(read(HTTP.parse_multipart_form(req)[2].data)))

```
