func sessionUpload(){
//上传地址
let url = NSURL(string: "http://www.zhekd.com/admin.php/Process/test")
//请求
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let session = NSURLSession.sharedSession()
//上传数据流
let adImage = qrCodeImage.image
let adImageData = UIImageJPEGRepresentation(adImage!, 0.7)
let data64String = adImageData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
let dataImage2 = data64String!.dataUsingEncoding(NSUTF8StringEncoding)
print(dataImage2)
let uploadTask = session.uploadTaskWithRequest(request, fromData: dataImage2) {
(data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
if error != nil{
print("发生了错误===========")
print(error?.code)
print(error?.description)
}else{
let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("上传完毕============")
print(str)
}
}
//使用resume方法启动任务
uploadTask.resume()
}
我上传的代码是这个样子的。这个dataImage2是十六进制的,我要怎么样才能转成二进制的给服务器。
我曾经用先转成十进制,再转成二进制的方法,但是再转成十进制的时候,就报错了,方法如下,错误原因也没有提示,就是直接奔溃了,lldb 那种。
//十六进制 => 十进制
func hex2dec(num:String) -> Int64 {
let str = num.uppercaseString
var sum:Int64 = 0
for i in str.utf8 {
let s = sum*16
let int = Int64(i)
sum = s+int-48
if i >= 65 { // A-Z 从65开始,但有初始值10,所以应该是减去55
sum -= 7
}
}
return sum
}
//十进制转二进制
func dec2bin(var number:Int64) -> String {
var str = ""
while number > 0 {
str = "\(number % 2)" + str
number /= 2
}
print(str)
return str
}
J'ai été surpris de voir cet algorithme de conversion hexadécimal en binaire. Voulez-vous utiliser Int64 pour enregistrer la valeur d’une image ? Comment peut-on le sauver ? ?
Quelle que soit la raison pour laquelle il est nécessaire de convertir en hexadécimal, c'est quelque chose dont vous et votre backend devez discuter... Si vous voulez vraiment convertir, vous devez convertir petit à petit pour enregistrer... Hexadécimal Un chiffre dans correspond à 4 chiffres dans le système binaire Tu aurais dû l'apprendre au collège... 0 correspond à 0000, F correspond à 1111...
Gérez-vous le serveur vous-même ? Vous pouvez essayer de le convertir en base64 et de l'envoyer au serveur pour traitement... Pour autant que je sache, iOS peut envoyer des binaires... Mais nous devons nous coordonner entre les deux parties