I'm trying to upload a large (like in don't fit in memory) file to S3 using presigned request. I finally got it to work with curl
curl -v -T video.mp4 "http://<myBucket>.s3.amazonaws.com/video.mp4?AWSAccessKeyId=<myAccessKey>&Expires=1492187347&Signature=vpcUnvGALlVXju31Qk2nXNmBTgc%3D"
I'm trying to now do that from my app. I first tried with AF (that I'd rather not use):
let videoPath = Bundle.main.path(forResource: "media", ofType: "mov")!
let videoUrl = URL(fileURLWithPath: videoPath)
let presignedUrl = "http://<myBucket>.s3.amazonaws.com/video.mp4?AWSAccessKeyId=<myAccessKey>&Expires=1492187347&Signature=vpcUnvGALlVXju31Qk2nXNmBTgc%3D"
request = Alamofire.upload(videoUrl, to: presignedUrl, method: .put, headers: [:])
request.responseString(completionHandler: { response in
print(response)
})
request.resume()
Which prints an successful response that is actually an error:
The request signature we calculated does not match the signature you provided. Check your key and signing method.
I've read in a few places that there might be issues with headers, and I'd rather not use AF here anyway.
What is in Swift an equivalent of curl -T filePath url
?