मैं सर्वर पर फ़ाइल अपलोड करने का प्रयास कर रहा हूं। मैं अपने बैकएंड कोड में स्लिमफ्रेमवर्क और PHP का उपयोग कर रहा हूं और यह रीस्टफुल फॉर्म में है। अगर मैं इसे पोस्टमैन के माध्यम से अपलोड करता हूं तो छवि अपलोडिंग बहुत अच्छी तरह से काम करती है, हालांकि मैं इसे स्विफ्ट और अलामोफायर लाइब्रेरी का उपयोग करके काम करने में सक्षम नहीं हूं।शरीर पैरामीटर में छवि फ़ाइल प्राप्त करना
मार्ग मैं बैकएंड में है में, मैं इस तरह फ़ाइल मिलता है, शरीर पैरामीटर से:
$image->moveTo("myPath");
स्विफ्ट में:
$image = $request->getUploadedFiles();
और अपलोड करने के लिए मैं का उपयोग मेरे पास राउटर है, जो .post
विधि और मार्ग यूआरएल देता है और मैंने इस तरह कोशिश की:
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
}
और मैं इसे इस तरह कहते हैं:
$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));
});
अजीब बात यह है कि Alamofire स्थिति कोड 500 आउटपुट लेकिन सर्वर ने मुझे इसके बारे में कुछ भी नहीं है नहीं बताया है:
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")
}
}
}
}
यह मेरा बैकएंड मार्ग है । समस्या स्विफ्ट भाग में होना चाहिए। इसलिए मुझे यह नहीं पता कि इसे कैसे डिबग करना है।
मुझे समस्या का समाधान कैसे करना चाहिए?
आप डेटा ऑब्जेक्ट में पैरामीटर में "newfile" कुंजी का मान सेट कर रहे हैं जिसमें फ़ाइल की वास्तविक सामग्री के बजाय फ़ाइल की सामग्री है। क्या आप यही करना चाहते हैं? Router.imageUpload क्या करता है? –
@ScottThompson Router.imageUpload बस देता है। पोस्ट विधि और एंडपॉइंट यूआरएल और यह प्राधिकरण भाग को संभालता है। –