我在下面有这样的代码
func upload(){
let img = UIImage(named: "1")
let imgData = UIImageJPEGRepresentation(img!, 1)
let data = imgData?.base64EncodedString()
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "POST"
request.setValue("\(auth)", forHTTPHeaderField: "Authorization")
request.setValue("application/xml", forHTTPHeaderField: "Content-Type")
var postString = "<uploadrequest>"
postString += "<folderid>123</folderid>"
postString += "<folder_name>images</folder_name>"
postString += "<image_byte>\(data!)</image_byte>"
postString += "</uploadrequest>"
request.httpBody = postString.data(using: .utf8)
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: OperationQueue.main)
let task = session.uploadTask(with: request, from: imgData!, completionHandler: {
(data, response, error) -> Void in
if let error = error {
print(error)
return
}
if let data = data {
_ = self.parseJsonData(data: data)
}
})
task.resume()
}
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
print("sent:", totalBytesSent, "from:", totalBytesExpectedToSend)
let size = totalBytesSent / totalBytesExpectedToSend
self.progressbar.progress = Float(size)
}
我的目标是使用API上传图像,并获得其上传进度。图像转换为base64并插入到
<image_byte>\(data!)</image_byte>
在API的poststring上。
然后我得到的是这样的:
发送:32768发件人:927220
发送:65536发件人:927220
发送:131072发件人:927220
发送:163840发件人:927220
发送:262144发件人:927220
发送:294912发件人:927220
发送:360448发件人:927220
发送:393216发件人:927220
发送:425984发件人:927220
发送:491520发件人:927220
发送:524288发件人:927220
发送:557056发件人:927220
发送:589824发件人:927220
发送:622592发件人:927220
发送:655360发件人:927220
发送:688128发件人:927220
发送:720896发件人:927220
发送:786432发件人:927220
发送:819200发件人:927220
发送:851968发件人:927220
发送:927220发件人:927220
Error Domain=NSCocoaErrorDomain Code=3840“JSON文本未以数组或对象开头,并且未设置允许片段的选项。”
UserInfo={NSDebugDescription=JSON文本未以数组或开头
对象和选项,以允许未设置片段。}
但是如果我使用其他类似的方法(没有uploadTask),它工作得很好,但没有上传进度。
let task = URLSession.shared.dataTask(with: request, completionHandler: {
(data, response, error) -> Void in
if let error = error {
print(error)
return
}
if let data = data {
_ = self.parseJsonData(data: data)
}
})
我试过了
Alamofire
也
阿拉莫菲尔
具有
request
功能成功,但仍然没有提供上载进度,并且
阿拉莫菲尔
具有
upload
函数(multipartformData)出现以下错误:
我想知道我的代码是否出错。你能告诉我该怎么处理我的代码吗?或者问题是我的API,因为我的API只接受
base64
密码
如果你想看看我的
阿拉莫菲尔
代码,它是
there
拜托,谁来帮我解决这个问题。
谢谢!:)
编辑1
这是我通过请求功能得到的结果(无上载功能)
{
"media_preview" = {
"image_media" = {
fileid = 4928501;
filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
folderpath = "product\\66861/images800\\";
height = 533;
src = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
width = 800;
};
"medium_media" = {
fileid = 4928503;
filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
folderpath = "product\\66861/images500\\";
height = 333;
src = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
width = 500;
};
"small_media" = {
fileid = 4928503;
filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
folderpath = "\product\\66861/images300\\";
height = 200;
src = "/zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
width = 300;
};
"source_media" = {
fileid = 4928499;
filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
folderpath = "\\product\\66861images\\";
height = 666;
src = "/zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
width = 999;
};
"thumbnail_media" = {
fileid = 4928507;
filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
folderpath = \\product\\66861/thumb\\";
height = 150;
src = "/zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
width = 150;
};
};
responsestatus = {
"access_token" = "<null>";
code = 00;
description = Success;
};
}
编辑2
这是的代码
parseJsonData(data: Data)
func parseJsonData(data: Data) {
do {
let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
print(jsonResult!)
} catch {
print(error)
}
}