Firstly.
Uploading from UIImagePickerController you will need a data file from Image Picker.
First you will need UIImagePickerControllerDelegate
, UINavigationControllerDelegate
and add Privacy-Photo Library Usage Description
in info.plist file.
Before calling the imagePickerController function, you need to add the UIImagePickerController delegate inside your function. For example, I have a handleProfilePicker
function
1 2 3 4 5 6 7 8 |
<span class="token keyword">func</span> <span class="token function">handleProfilePicker</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> picker <span class="token operator">=</span> <span class="token function">UIImagePickerController</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> picker <span class="token punctuation">.</span> delegate <span class="token operator">=</span> <span class="token keyword">self</span> picker <span class="token punctuation">.</span> allowsEditing <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">(</span> your custom code <span class="token keyword">for</span> navigationBar <span class="token keyword">in</span> <span class="token builtin">Picker</span> color <span class="token punctuation">)</span> <span class="token keyword">self</span> <span class="token punctuation">.</span> <span class="token function">present</span> <span class="token punctuation">(</span> picker <span class="token punctuation">,</span> animated <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> completion <span class="token punctuation">:</span> <span class="token constant">nil</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> |
After adding the delegate, you can call the function imagePickerController didFinishPickingMediaWithInfo
. This function is to keep the image file from your photo library
1 2 3 |
<span class="token keyword">func</span> <span class="token function">imagePickerController</span> <span class="token punctuation">(</span> <span class="token number">_</span> picker <span class="token punctuation">:</span> <span class="token builtin">UIImagePickerController</span> <span class="token punctuation">,</span> didFinishPickingMediaWithInfo info <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token builtin">String</span> <span class="token punctuation">:</span> <span class="token builtin">Any</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> |
I had a sample code to complete the picker to select the image from the Image processing is value and not edit edit:
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token keyword">func</span> <span class="token function">imagePickerController</span> <span class="token punctuation">(</span> <span class="token number">_</span> picker <span class="token punctuation">:</span> <span class="token builtin">UIImagePickerController</span> <span class="token punctuation">,</span> didFinishPickingMediaWithInfo info <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token builtin">String</span> <span class="token punctuation">:</span> <span class="token builtin">Any</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> selectedImage <span class="token punctuation">:</span> <span class="token builtin">UIImage</span> <span class="token operator">?</span> <span class="token keyword">if</span> <span class="token keyword">let</span> editedImage <span class="token operator">=</span> info <span class="token punctuation">[</span> <span class="token string">"UIImagePickerControllerEditedImage"</span> <span class="token punctuation">]</span> <span class="token keyword">as</span> <span class="token operator">?</span> <span class="token builtin">UIImage</span> <span class="token punctuation">{</span> selectedImage <span class="token operator">=</span> editedImage <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token keyword">let</span> originalImage <span class="token operator">=</span> info <span class="token punctuation">[</span> <span class="token string">"UIImagePickerControllerOriginalImage"</span> <span class="token punctuation">]</span> <span class="token keyword">as</span> <span class="token operator">?</span> <span class="token builtin">UIImage</span> <span class="token punctuation">{</span> selectedImage <span class="token operator">=</span> originalImage <span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token keyword">let</span> selectedImages <span class="token operator">=</span> selectedImage <span class="token punctuation">{</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
After successfully selecting images from the picker, the second thing is to know the data images. UIImageJPEGRepresentation will return the selected image from the picker to a JPEG image and compress it
1 2 3 |
<span class="token keyword">if</span> <span class="token keyword">let</span> data <span class="token operator">=</span> <span class="token function">UIImageJPEGRepresentation</span> <span class="token punctuation">(</span> selectedImages <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> |
Parameters
We will upload the image from the picker when the asscess token is required
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<span class="token keyword">if</span> <span class="token keyword">let</span> data <span class="token operator">=</span> <span class="token function">UIImageJPEGRepresentation</span> <span class="token punctuation">(</span> selectedImages <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> parameters <span class="token punctuation">:</span> <span class="token builtin">Parameters</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">"access_token"</span> <span class="token punctuation">:</span> <span class="token string">"YourToken"</span> <span class="token punctuation">]</span> <span class="token comment">// You can change your image name here, i use NSURL image and convert into string</span> <span class="token keyword">let</span> imageURL <span class="token operator">=</span> info <span class="token punctuation">[</span> <span class="token builtin">UIImagePickerControllerReferenceURL</span> <span class="token punctuation">]</span> <span class="token keyword">as</span> <span class="token operator">!</span> <span class="token constant">NSURL</span> <span class="token keyword">let</span> fileName <span class="token operator">=</span> imageURL <span class="token punctuation">.</span> absouluteString <span class="token comment">// Start Alamofire</span> <span class="token builtin">Alamofire</span> <span class="token punctuation">.</span> <span class="token function">upload</span> <span class="token punctuation">(</span> multipartFormData <span class="token punctuation">:</span> <span class="token punctuation">{</span> multipartFormData <span class="token keyword">in</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> key <span class="token punctuation">,</span> value <span class="token punctuation">)</span> <span class="token keyword">in</span> parameters <span class="token punctuation">{</span> multipartFormData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> value <span class="token keyword">as</span> <span class="token operator">!</span> <span class="token builtin">String</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">data</span> <span class="token punctuation">(</span> using <span class="token punctuation">:</span> <span class="token punctuation">.</span> utf8 <span class="token punctuation">)</span> <span class="token operator">!</span> <span class="token punctuation">,</span> withName <span class="token punctuation">:</span> key <span class="token punctuation">)</span> <span class="token punctuation">}</span> multipartFormData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> data <span class="token punctuation">,</span> withName <span class="token punctuation">:</span> <span class="token string">"avatar"</span> <span class="token punctuation">,</span> fileName <span class="token punctuation">:</span> fileName <span class="token operator">!</span> <span class="token punctuation">,</span> mimeType <span class="token punctuation">:</span> <span class="token string">"image/jpeg"</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> usingTreshold <span class="token punctuation">:</span> <span class="token builtin">UInt64</span> <span class="token punctuation">.</span> <span class="token keyword">init</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> to <span class="token punctuation">:</span> <span class="token string">"YourURL"</span> <span class="token punctuation">,</span> method <span class="token punctuation">:</span> <span class="token punctuation">.</span> put <span class="token punctuation">,</span> encodingCompletion <span class="token punctuation">:</span> <span class="token punctuation">{</span> encodingResult <span class="token keyword">in</span> <span class="token keyword">switch</span> encodingResult <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token punctuation">.</span> <span class="token function">success</span> <span class="token punctuation">(</span> <span class="token keyword">let</span> upload <span class="token punctuation">,</span> <span class="token number">_</span> <span class="token punctuation">,</span> <span class="token number">_</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> upload <span class="token punctuation">.</span> responJSON <span class="token punctuation">{</span> response <span class="token keyword">in</span> <span class="token function">debugPrint</span> <span class="token punctuation">(</span> response <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">case</span> <span class="token punctuation">.</span> <span class="token function">failure</span> <span class="token punctuation">(</span> <span class="token keyword">let</span> encodingError <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token function">print</span> <span class="token punctuation">(</span> encodingError <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Make sure your key is in the parameter with the server and of course the withName
parameter in multipartFormData is the same. I hope you will successfully upload photos from the picker with Alamofire