Javascript – React-native upload image to amazons s3

amazon-s3fetchfile-uploadjavascriptreact-native

I want to upload images from my app to S3 server. I have all data and codes calculated (tested using curl on computer) but I can't figure out how to call 'fetch' correctly. I'm getting response:

'At least one of the pre-conditions you specified did not hold. Condition: Bucket POST must be of the enclosure-type-multipart/form-data'

How can I recreate form-data in react-natives fetch? There is no FormData to which I can append and then send it like in fetches example.

EDIT:
Thanks @philipp-von-weitershausen, greate that you have added this feature. However I have some troubles calling it. I'm getting "Unsupported BodyInit type". Found that is because in fetch.js: "support.formData" returns false. What am I missing when I call fetch?

My code example:

 var form = new FormData();
 form.append("FormData", true)
 form.append("name", this.state.invoiceNumber)
 form.append("key", this.state.invoiceNumber)
 form.append("Content-Type", "image/png")
 form.append('file', this.props.uri)
 //alert(FormData.prototype.isPrototypeOf(form))

  fetch(amazon_url,{body: form,mode: "FormData", method: "post", headers: {"Content-Type": "multipart/FormData"}})
          .then((response) => response.json())
          .catch((error) => {
             alert("ERROR " + error)
          })
          .then((responseData) => {
             alert("Succes "+ responseData)
          })
          .done();

Best Solution

@MichaƂ Zubrzycki Thanks, your code for uploading picture worked for me with little changes.

const photo = {
  uri: user.profilePicture,
  type: "image/jpeg",
  name: "photo.jpg"
};
const form = new FormData();
form.append("ProfilePicture", photo);
fetch(Constants.API_USER + "me/profilePicture", {
  body: form,
  method: "PUT",
  headers: {
    "Content-Type": "multipart/form-data",
    Authorization: "Bearer " + user.token
  }
})
  .then(response => response.json())
  .catch(error => {
    console.log("ERROR ", error);
  })
  .then(responseData => {
    console.log("Success", responseData);
  })
  .done();