Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CH3COOH/bbfdc81f0f6718bb067b3ba919f3618f to your computer and use it in GitHub Desktop.
Save CH3COOH/bbfdc81f0f6718bb067b3ba919f3618f to your computer and use it in GitHub Desktop.
Upload photos to Mastodon
func upload(user: User?, asset: PHAsset?) -> Future<Attachment, TendonError> {
let promise = Promise<Attachment, TendonError>()
guard let user = user else {
promise.failure(TendonError.invalidUser)
return promise.future
}
guard let asset = asset else {
promise.failure(TendonError.argument)
return promise.future
}
imageManager.requestImageData(for: asset, options: nil) { (imageData, _, orientation, info) in
let urlString = user.serverName + "/api/v1/media"
Alamofire.upload(multipartFormData: { (data) in
data.append(imageData!, withName: "file", fileName: "\(UUID.init().uuidString).png", mimeType: "image/png") // png format!
}, usingThreshold: UInt64.init(), to: URL(string: urlString)!, method: .post, headers: ["Authorization": "Bearer " + user.oauthToken], encodingCompletion: { (result) in
switch result {
case .success(let upload, _, _):
upload.responseData(completionHandler: { (dataResponse) in
guard
let data = dataResponse.data,
let jsonObject = try? JSONSerialization.jsonObject(with: data, options: [])
else {
promise.failure(TendonError.library)
return
}
guard
let httpResponse = dataResponse.response as? HTTPURLResponse,
httpResponse.statusCode == 200
else {
let mastodonError = MastodonError(json: jsonObject)
promise.failure(TendonError.library)
return
}
promise.success(Attachment(from: jsonObject as! JSONDictionary)!)
})
break
default:
break
}
})
}
return promise.future
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment