Dosyaya sunucu yüklemeye çalışıyorum. Arka uç kodumda SlimFramework ve PHP kullanıyorum ve RESTful formda. Postman üzerinden yüklediğimde, resim yüklemesi çok iyi çalışıyor ancak Swift ve Alamofire kitaplığını kullanarak çalışmam mümkün değil. Ben arka uç var rotada Resim dosyasını gövde parametresine alma
, ben vücut parametresinden böyle dosyayı almak: Swift ise$image->moveTo("myPath");
:
$image = $request->getUploadedFiles();
ve yüklemek için kullandığım .post
yöntemini ve yol URL'sini veren yönlendiricim var ve şu şekilde denedim:
func uploadImage(user_id: Int, image: Data, completion: @escaping (_ error: Error?, _ success: Bool)->Void) {
let parameters = [
"user_id": user_id,
"newFile": image
] as [String : Any]
Alamofire.request(Router.imageUplaod(parameters: parameters))
.validate(statusCode: 200..<300)
.responseJSON { response in
switch response.result{
case .failure(let error):
completion(error, false)
print(error)
case .success(let value):
//Registered sucesfully! let json = JSON(value)
completion(nil, true)
}//Switch case
}//Alamofire
}
Ve böyle diyoruz:
$this->post('/image/upload', function($request, $response, $args){
global $database;
$data = $request->getParsedBody();
$user_id = $data['user_id'];
$files = $request->getUploadedFiles();
if (empty($files['newfile'])) {
throw new Exception('Expected a newfile');
}
$newfile = $files['newfile'];
if ($newfile->getError() === UPLOAD_ERR_OK) {
$uploadFileName = "profileImage".$user_id.".jpg";
$newfile->moveTo("/path/to/image/$uploadFileName");
}
$database->query("UPDATE `users` SET `profile_image_url` = :image WHERE user_id = :user_id");
$database->bind(':image', $uploadFileName);
$database->bind(':user_id', $user_id);
$database->execute();
$Jsonarray['status'] = "true";
$Jsonarray['message'] = "Image Uploaded Successfully";
return $response->withStatus(200)->withHeader('Content-Type', 'application/json')->write(json_encode($Jsonarray));
});
garibi Alamofire durum kodu 500 verir ancak sunucu bana bu konuda bir şey söylemek kalmamasıdır:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let chosenProfileImage = info[UIImagePickerControllerEditedImage] as! UIImage
let imageData = UIImageJPEGRepresentation(chosenProfileImage, 0.2)
profileImageView.image = chosenProfileImage
dismiss(animated: true) {
API.uploadImage(user_id: User.sharedInstance.user_id, image: imageData!) { (error, success) in
if success{
print("IMAGE UPLOADDED")
}
}
}
}
Bu benim arka uç yoldur . Sorun Swift bölümünde olmalı. Bu yüzden, nasıl hata ayıklanacağımı bile bilmiyorum.
Sorunu nasıl çözmeliyim?
Parametrelerde "newfile" anahtarının değerini, dosyanın gerçek içeriğini değil, dosyanın içeriğini tutan bir veri nesnesine ayarlarsınız. Yapmak istediğin şey bu mu? Router.imageUpload ne yapar? –
@ScottThompson Router.imageUpload sadece .post yöntemini ve son nokta URL'sini döndürür ve Yetkilendirme bölümünü ele alır. –