I send the text to the server with picture via POST
. The text come correctly, but the picture is not complete. 10 percent of the picture is displayed correctly, and other is just as gray background. Swift
converts the image file to text using base64EncodedString()
.
It seems that Swift
performs the conversion with an error, or the server does not fully receive the data. But I have increase the limit for POST
and it doesn't help. I also changed the image compression values with compressionQuality
, it did not help.
Code from view file:
Button(action: {
self.checkBoxStatus = false
let uiImage: UIImage = self.selectedImage.asUIImage()
let imageData: Data = uiImage.jpegData(compressionQuality: 0.9) ?? Data()
let imageStr: String = imageData.base64EncodedString()
let shareHelper = ShareHelper(message: validateForm.content, user: validateForm.user, email: validateForm.email, media: imageStr)
shareHelper.RequestPost { (dataString) in
self.checkRequestStatus = true
validateForm.content = ""
validateForm.user = ""
validateForm.email = ""
validateForm.media = ""
self.selectedImage = Image("")
}
}, label: {
Text("Send")
})
How to fix it?
P.S.:
POST
request code:
import Foundation
class ShareHelper {
var dataString: String = ""
var newsMessage: String
var newsUser: String
var newsEmail: String
var newsMedia: String
let newsAPI: String = "https://example.com/api/shareNews"
init(message: String, user: String, email: String, media: String) {
self.newsMessage = message
self.newsUser = user
self.newsEmail = email
self.newsMedia = media
}
func RequestPost(completion: @escaping((String) -> Void)) {
let url = URL(string: self.newsAPI)
guard let requestUrl = url else { fatalError() }
var request = URLRequest(url: requestUrl)
request.httpMethod = "POST"
let postString = "message=\(self.newsMessage)&user=\(self.newsUser)&email=\(self.newsEmail)&media=\(self.newsMedia)"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if error != nil {
return
}
if let data = data, let dataString = String(data: data, encoding: .utf8) {
DispatchQueue.main.async {
self.dataString = dataString
completion(dataString)
}
}
}
task.resume()
}
}