Swift Stripe: Create a File Upload

Back to Index

Uploads a file to Stripe.

Documentation: https://stripe.com/docs/api/curl#create_file_upload

CURL Command

curl https://files.stripe.com/v1/files \
   -u STRIPE_SECRET_KEY: \
   -F purpose=dispute_evidence \
   -F file="@/path/to/a/file.jpg"

Swift Example


func chilkatTest() {
    let rest = CkoRest()
    var success: Bool

    //  URL: https://files.stripe.com/v1/files
    var bTls: Bool = true
    var port: Int = 443
    var bAutoReconnect: Bool = true
    success = rest.Connect("files.stripe.com", port: port, tls: bTls, autoReconnect: bAutoReconnect)
    if success != true {
        print("ConnectFailReason: \(rest.ConnectFailReason.integerValue)")
        print("\(rest.LastErrorText)")
        return
    }

    rest.SetAuthBasic("STRIPE_SECRET_KEY", password: "")

    rest.PartSelector = "1"
    rest.AddHeader("Content-Disposition", value: "form-data; name=\"purpose\"")
    rest.SetMultipartBodyString("dispute_evidence")

    rest.PartSelector = "2"
    let fileStream2 = CkoStream()
    fileStream2.SourceFile = "/path/to/a/file.jpg"
    rest.AddHeader("Content-Disposition", value: "form-data; name=\"/path/to/a/file.jpg\"; filename=\"/path/to/a/file.jpg\"")
    rest.AddHeader("Content-Type", value: "image/jpeg")
    rest.SetMultipartBodyStream(fileStream2)

    rest.PartSelector = "0"

    rest.AddHeader("Expect", value: "100-continue")

    var strResponseBody: String? = rest.FullRequestMultipart("POST", uriPath: "/v1/files")
    if rest.LastMethodSuccess != true {
        print("\(rest.LastErrorText)")
        return
    }

    let jsonResponse = CkoJsonObject()
    jsonResponse.Load(strResponseBody)

    var id: String?
    var object: String?
    var created: Int
    var filename: String?
    var purpose: String?
    var size: Int
    var type: String?
    var url: String?

    id = jsonResponse.StringOf("id")
    object = jsonResponse.StringOf("object")
    created = jsonResponse.IntOf("created").integerValue
    filename = jsonResponse.StringOf("filename")
    purpose = jsonResponse.StringOf("purpose")
    size = jsonResponse.IntOf("size").integerValue
    type = jsonResponse.StringOf("type")
    url = jsonResponse.StringOf("url")

}

Sample JSON Response Body

{
  "id": "file_1BnEEuGswQrCoh0XqB3XkqAg",
  "object": "file_upload",
  "created": 1516661888,
  "filename": "path",
  "purpose": "sigma_scheduled_query",
  "size": 500,
  "type": "csv",
  "url": "https://stripe-upload-api.s3.amazonaws.com/uploads/file_1BnEEuGswQrCoh0XqB3XkqAg?AWSAccessKeyId=KEY_ID\u0026Expires=TIMESTAMP\u0026Signature=SIGNATURE"
}