gpt4 book ai didi

php - 将图像文件获取到 body 参数

转载 作者:IT王子 更新时间:2023-10-29 05:36:35 25 4
gpt4 key购买 nike

我正在尝试将文件上传到服务器。我在我的后端代码中使用 SlimFramework 和 PHP,它是 RESTful 形式的。如果我通过 Postman 上传图像,图像上传效果很好,但是我无法使用 Swift 和 Alamofire 库让它工作。

在后端的路由中,我从 body 参数中得到这样的文件:

$image = $request->getUploadedFiles();

为了上传我使用了:

$image->moveTo("myPath");

在 Swift 中,我有路由器,它提供了 .post 方法和路由 URL,我试过这样:

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
}

我这样调用它:

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")
}
}
}
}

这是我的后端路由:

 $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,但服务器什么也没告诉我。问题一定出在 Swift 部分。所以我什至不知道如何调试它。

我该如何解决这个问题?

最佳答案

我解决了这个问题。我以这种方式重建它:

  1. 在客户端将图片转换为Base64字符串
  2. 在后端解码成图片
  3. 上传

所以在 Swift 中我这样转换它:

let chosenProfileImage = info[UIImagePickerControllerEditedImage] as! UIImage
let imageData = UIImageJPEGRepresentation(chosenProfileImage, 0.2)
profileImageView.image = chosenProfileImage

let base64String = imageData?.base64EncodedString(options: .lineLength64Characters)

后端几乎相同,只是使用 base64_decode(); 将其转换回文件并使用 file_put_contents(); 函数将其移动到服务器。

关于php - 将图像文件获取到 body 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com