如何使用Alamofire POST请求将图像发送为Base64String,以及如何在Asp.net MVC4 web
本文关键字:Asp web MVC4 net POST Alamofire 何使用 请求 图像 Base64String | 更新日期: 2023-09-27 18:24:37
我是iOS的新手,在我的项目中,我使用Alamofire(3.0.0)作为后台asp.net MVC4 web Api。我已经通过这种方式将我的图像转换为base64string
swift 2.0
var userProfileImage : String = ""
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if let _image = info["UIImagePickerControllerEditedImage"] as? UIImage
//if let _image = info["UIImagePickerControllerOriginalImage"] as? UIImage
{
capturedImage = _image
self.profilePicture.image = _image
//cache.saveImage(capturedImage, path: _cache.fileInDocumentsDirectory("profileImage"))
let imagetosave = UIImageJPEGRepresentation(_image, 1.0)
let base64encodedImage = imagetosave!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
userProfileImage = base64encodedImage
}
else if let _image = info["UIImagePickerControllerOriginalImage"] as? UIImage
{
let __image = UIImageJPEGRepresentation(_image,1.0)
let base64encodedImage = __image!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
userProfileImage = base64encodedImage
}
}
我的Alamofire请求如下
let params = ["userid":"'(user)" , "firstname":"'(String(_firstName))" , "middlename":"'(String(_middlename))","lastname":"'(String(_lastname))","email":"'(String(_email))","base64String":"'(userProfileImage)"]
Alamofire.request(.POST, App.AppHomeURL() + "Update_Profile", parameters : params, encoding : .JSON).responseJSON{
response in
case .Success(let data) :
let json = JSON(data)
print("JSON DATA : '(json)")
case .Failure(let error):
print(error)
}
最后,我接受请求的ApiController是
[System.Web.Http.HttpPost]
public JsonResult Update_Profile(string userid, string firstname, string middlename, string lastname, string email, string base64String)
{
// code goes here ...
}
使用Alamofire将图像发送到web api是正确的方式吗?我得到的响应状态为404?如何使用Alamofire和swift将图像发送到asp.net mvc4 web api,以及如何在api Controller中处理请求?
目前我正在做的是。。。
从ImagePicker获取图像,并将其转换为Base64字符串,然后将其分配给一个变量以供以后使用。。。
注意:我正在压缩我的图像使其更小,并将该代码也放入
var userProfileImage : String = ""
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let capturedImage : UIImage
if let _image = info["UIImagePickerControllerEditedImage"] as? UIImage
{
capturedImage = _image
self.profilePicture.image = _image
let _image_compressed = compressImage(_image)
let imagetosave = UIImageJPEGRepresentation(_image_compressed , 1.0)
let base64encodedImage = imagetosave!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
userProfileImage = base64encodedImage
}
else if let _image = info["UIImagePickerControllerOriginalImage"] as? UIImage
{
capturedImage = _image
let _imageCompressed = compressImage(_image)
let __image = UIImageJPEGRepresentation(_imageCompressed , 1.0)
let base64encodedImage = __image!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue : 0))
userProfileImage = base64encodedImage
self.profilePicture.image = _image
}
else
{
return
}
dismissViewControllerAnimated(true, completion: nil)
}
//压缩图像
func compressImage(image : UIImage) -> UIImage
{
var _actualImageHeight : CGFloat = image.size.height
var _actualImageWidth : CGFloat = image.size.width
let _maxHeight : CGFloat = 300.0
let _maxWidth : CGFloat = 400.0
var _imageRatio : CGFloat = _actualImageWidth / _actualImageHeight
let _maxRatio: CGFloat = _maxWidth / _maxHeight
let _imageCompressionQuality : CGFloat = 0.5 // makes the image get compressed to 50% of its actual size
if _actualImageHeight > _maxHeight || _actualImageWidth > _maxWidth
{
if _imageRatio < _maxRatio
{
// Adjust thw width according to the _maxHeight
_imageRatio = _maxHeight / _actualImageHeight
_actualImageWidth = _imageRatio * _actualImageWidth
_actualImageHeight = _maxHeight
}
else
{
if _imageRatio > _maxRatio
{
// Adjust height according to _maxWidth
_imageRatio = _maxWidth / _actualImageWidth
_actualImageHeight = _imageRatio * _actualImageHeight
_actualImageWidth = _maxWidth
}
else
{
_actualImageHeight = _maxHeight
_actualImageWidth = _maxWidth
}
}
}
let _compressedImage : CGRect = CGRectMake(0.0 , 0.0 , _actualImageWidth , _actualImageHeight)
UIGraphicsBeginImageContext(_compressedImage.size)
image.drawInRect(_compressedImage)
let img: UIImage = UIGraphicsGetImageFromCurrentImageContext()
let imageData: NSData = UIImageJPEGRepresentation(img, _imageCompressionQuality)!
UIGraphicsEndImageContext()
return UIImage(data: imageData)!
}
这是我的方法(IBAction),我将用户配置文件的详细信息发送到服务器,其中包括Base64图像作为字符串
@IBAction func saveUserDetails(sender: AnyObject) {
let _oldpass = userOldPassword.text!
let _newPass = userNewPassword.text!
let _newPassCoonfirm = userRetypedPassword.text!
let _email : String = userEmail.text!
var _firstName : String = ""
let _middlename : String = userMiddleName.text!
let _lastname : String = userLastName.text!
let _pass : String = userNewPassword.text!
var _profileImage : String = ""
if let profileImage = self.userProfileImage as? String
{
_profileImage = profileImage
}
else
{
_profileImage = ""
}
if let _first = userFirstName.text! as? String
{
_firstName = _first
}
else
{
_firstName = ""
}
let params = ["firstname":"'(String(_firstName))"
,"middlename":"'(String(_middlename))"
,"lastname":"'(String(_lastname))"
,"password":"'(String(_pass))"
,"email":"'(String(_email))"
,"oldpassword":"'(_oldpass)"
,"base64String":"'(_profileImage)"]
Alamofire.request(.POST, App.AppHomeURL() + "Update_Profile", parameters : params , encoding : .JSON).responseJSON{
response in
switch response.result {
case .Success(let data) :
let json = JSON(data)
let ProfileEdit = json["Data"]
if (ProfileEdit)
{
print("true")
}
case .Failure(let _error):
print("false")
}
}
}
这是我的Asp.Net MVC控制器动作
[route.System.Web.Http.HttpPost]
[HttpRoute("api/Home/Update_Profile")]
public JsonResult Update_Profile([FromBody]UpdateProfileViewModel updateprofileviewmodel)
{
UserModel usermodelforemail = Helper.FindUserByEmail(updateprofileviewmodel.email);
System.Web.Mvc.JsonResult usertoreturn = new System.Web.Mvc.JsonResult();
UserModel usermodel = new UserModel();
usermodel = FridgeHelper.FindUserByObjectId(updateprofileviewmodel.userid);
usermodel.FirstName = updateprofileviewmodel.firstname;
usermodel.MiddleName = updateprofileviewmodel.middlename;
usermodel.LastName = updateprofileviewmodel.lastname;
usermodel.Email = updateprofileviewmodel.email;
//save photo
if (updateprofileviewmodel.base64String != null)
{
byte[] imageBytes = Convert.FromBase64String(updateprofileviewmodel.base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
string filenametosave = usermodel._id + "." + System.Drawing.Imaging.ImageFormat.Jpeg;
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Content/UserProfilePictures/" + filenametosave);
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
image.Save(path);
usermodel.Photo = filenametosave;
}
bool resultvalue = false;
resultvalue = Helper.UpdateUser(usermodel);
if (resultvalue)
{
usertoreturn.Data = "true";
}
else
{
usertoreturn.Data = "false";
}
return usertoreturn;
}
现在一切都按照我需要的方式进行…:)