[英]How to transfer image files and data from swift5 to the spring server?
我正在通过 web 视图进行通信。 我的问题是将手机中的图片发送到web视图。
我在这里打电话给 API。 我不知道如何将其发送到 web 视图。 我知道如何只发送由字符串组成的Key,Value
。
我正在为手机拍照的代码。
let imagePicker: UIImagePickerController! = UIImagePickerController()
let imagePicker: UIImagePickerController! = UIImagePickerController()
var captureImage: UIImage!
var flagImageSave = false
@IBAction func btnLoadImageFromLibray(_ sender: UIButton) {
if (UIImagePickerController.isSourceTypeAvailable(.photoLibrary)) {
flagImageSave = false
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.mediaTypes = [kUTTypeImage as String]
imagePicker.allowsEditing = true
present(imagePicker, animated: true, completion: nil)
}else{
myAlert("photo album inaccessable", message: "application cannot access the photo album")
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let mediaType = info[UIImagePickerControllerMediaType] as! NSString
if mediaType.isEqual(to: kUTTypeImage as NSString as String){
captureImage = info[UIImagePickerControllerOriginalImage] as! UIImage
if flagImageSave {
UIImageWriteToSavedPhotosAlbum(captureImage, self, nil, nil)
}
imgView.image = captureImage
}else if mediaType.isEqual(to: kUTTypeMovie as NSString as String){
if flagImageSave {
videoURL = (info[UIImagePickerControllerMediaURL] as! URL)
UISaveVideoAtPathToSavedPhotosAlbum(videoURL.relativePath, self, nil, nil)
}
}
self.dismiss(animated: true, completion: nil)
}
Sping Project 上的服务器正在接收 API 代码
@RequestMapping(value="/sendimage", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> pr_image(HttpServletRequest webRequest
, @RequestParam(value="image", required=false) MultipartFile image
) {
Map<String, Object> param = new HashMap<String, Object>();
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> validationMap = ValidationUtils.ValidationOfKeys(webRequest);
if (!validationMap.get("res").equals("sucess")) return validationMap;
String num = (webRequest.getParameter("num") != null) ? webRequest.getParameter("num") : "";
String imagePath = "";
if (image != null) {
String Extension = Config.USER_PROFILE_IMAGE_EXT;
String fileName = "_" + Utils.getCurrentTime("yyyyMMddHHmmssSSS");
imagePath = Define.CONTENTS_FILE_PATH_4 + fileName + Extension ;
File saveDir = new File(Define.CONTENTS_SAVE_PATH + Define.CONTENTS_FILE_PATH_4);
if (!saveDir.isFile()) saveDir.mkdirs();
image.transferTo(new File(Define.CONTENTS_SAVE_PATH + imagePath));
String fileName_thumbnail = fileName + "_thumb" + Extension;
File thumbnail = new File(Define.CONTENTS_SAVE_PATH + Define.CONTENTS_FILE_PATH_4 + fileName_thumbnail);
thumbnail.getParentFile().mkdirs();
Thumbnails.of(saveDir + "/" + fileName + Extension).size(Config.USER_PROFILE_IMAGE_WIDTH, Config.USER_PROFILE_IMAGE_HEIGHT).outputFormat("jpg").toFile(thumbnail);
}
...
如何将带有数据的图片传输到 spring 服务器?
我不仅要发送图像,还要发送字符串中的数字。 看看我的服务器代码。
提前谢谢你
使用UIImageJPEGRepresentation
将UIImage
转换为NSData
,并上传使用
guard let data = UIImageJPEGRepresentation(image, 0.8) else {
return
}
Alamofire.upload(multipartFormData: { (form) in
form.append(data, withName: "image", mimeType: "image/jpg")
}, to: url) { (result) in
}
您可以使用Alamofire
模块解决此问题。
'Alamofire', '~> 4.8.2'
我正在使用Alamofire version 4.8.2
用法
func ImageUpload(_ image: UIImage) {
guard image.jpegData(compressionQuality: 0.9) != nil else {
self.dismiss(animated: true, completion: nil)
return
}
let imagedata = image.jpegData(compressionQuality: 0.9)
let uploadDict = ["num": "123456789"] as [String:String]
let headers: HTTPHeaders = ["key":"val"] // Use this if you need to add api headers
Alamofire.upload(multipartFormData: { MultipartFormData in
MultipartFormData.append(imagedata!, withName: "image" , fileName: "image.jpg" , mimeType: "image/jpg")
for(key,value) in uploadDict{
MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)}
},to: "\(url)", headers: headers, encodingCompletion: {
EncodingResult in
switch EncodingResult{
case .success(let upload, _, _):
upload.responseJSON { response in
guard let json = response.result.value! as? [String: Any] else {
return
}
print(json)
}
case .failure(let encodingError):
print("ERROR RESPONSE: \(encodingError)")
}
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.