通过 Alamofire 上传文件并使用 Slim PHP 在服务器端检索它
Posted
技术标签:
【中文标题】通过 Alamofire 上传文件并使用 Slim PHP 在服务器端检索它【英文标题】:Uploading files though Alamofire and retrieve it server side with Slim PHP 【发布时间】:2017-07-02 21:43:07 【问题描述】:我尝试使用Alamofire
(Link) (Swift 3.0) 解决有关文件上传的问题,并使用Slim php
(Link) 微框架在服务器端检索它们。
我正在尝试使用
上传从 iPhone 拍摄的照片Alamofire.upload(multipartFormData:
multipartFormData in
multipartFormData.append("value".data(/* ... */)!, withName :"key")
var idx = 1;
for imageRepresentation in imageData
let pictureName = "pictures[]"
multipartFormData.append(imageRepresentation, withName: pictureName, mimeType: "image/jpeg")
idx += 1
,
to: uploadUrl,
method:.post,
headers: httpHeaders,
encodingCompletion: /* ... */
在这里我几乎可以肯定这个脚本工作正常,因为当我点击https://httpbin.org/post
时,我会返回我上传的编码data base 64
图像,所以我很确定问题出在我的服务器端代码。
所以,正如我所说,我在这条路由中使用 Slim PHP (Link) 服务器端
$this->post('/upload', function ($request, $response, $args)
$request->getParsedBody(); //null
$request->getQueryParams(); // []
$request->getBody(); //
$request->getUploadedFiles(); // []
return /*Some JSON */
)->setName('upload');
我错过了什么吗?有什么我不明白的吗? 我已经试过了
Multipart/form-data example in slim micro framework https://akrabat.com/psr-7-file-uploads-in-slim-3/最奇怪的是,当从 Paw API Explorer 中执行脚本时,它的工作原理就像一个魅力
任何帮助将不胜感激!谢谢。
【问题讨论】:
【参考方案1】:用于上传从照片库中选择的图像
在 Swift 3 和 Alamofire 4 中
这里是如何使用 Alamofire 上传的完整实现
将以下内容添加到您的 ViewController 类中:
UIImagePickerControllerDelegate
和 UINavigationControllerDelegate
创建一个按钮:
首先创建一个按钮并在其中为选取器视图实现以下方法
@IBAction func btnSelectProfileImageClicked(_ sender: Any)
let ImagePicker = UIImagePickerController()
ImagePicker.delegate = self
ImagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
self.present(ImagePicker, animated: true, completion: nil)
然后实现以下 UIPicker 方法:
func imagePickerController( _ picker: UIImagePickerController,didFinishPickingMediaWithInfo info:[String : Any] )
Imgprofile.image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.dismiss(animated: true, completion: nil)
制作另一个按钮,使用 Alamofire 将数据传递到 URL,并为其提供 @IBAction
出口:
输入以下数据
@IBAction func btnUpdateProfileSelected(_ sender: Any)
Alamofire.upload(multipartFormData: (multipartFormData) in
multipartFormData.append(UIImageJPEGRepresentation(self.Imgprofile.image!, 1)!, withName: "Prescription", fileName: "Profile_Image.jpeg", mimeType: "image/jpeg")
, to:" Your URL Here where You want to Upload")
(result) in
switch result
case .success(let upload, _, _):
print(result)
upload.uploadProgress(closure: (progress) in
print(progress)
)
upload.responseJSON response in
//print response.result
print(response);
case .failure(let encodingError):
print(encodingError);
就是这样
希望对你有帮助
对于完整示例代码或任何疑问,请发表评论。我会为你提供 示例代码。其中包括获取以及 使用 Alamofire 上传数据。
谢谢
【讨论】:
我已经知道了。该问题位于 Alamofire 的Content-type
关于文件上传的问题。以上是关于通过 Alamofire 上传文件并使用 Slim PHP 在服务器端检索它的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 上传带有进度的大文件并在应用重启时显示进度