Swift3 Swift 3:上传图像时出现服务器错误500

Swift3 Swift 3:上传图像时出现服务器错误500,swift3,image-uploading,internal-server-error,http-status-code-500,Swift3,Image Uploading,Internal Server Error,Http Status Code 500,我试图上传图像到服务器,但得到500服务器错误。 下面是我的代码: public func uploadImage(docID: String, image: UIImage, comments: String, onCompletion: @escaping APIPostCallResponse) { self.postCallback = onCompletion let u = "\(IMAGE_UPLOAD)\(docID)&comment=\(comment

我试图上传图像到服务器,但得到500服务器错误。 下面是我的代码:

public func uploadImage(docID: String, image: UIImage, comments: String, onCompletion: @escaping APIPostCallResponse)
{
    self.postCallback = onCompletion

    let u = "\(IMAGE_UPLOAD)\(docID)&comment=\(comments)"
    let urlString: String = u.replacingOccurrences(of: " ", with: "%20")

    print(urlString)

    guard let url = URL(string: urlString) else
    {
        return
    }

    let imageData = UIImageJPEGRepresentation(image, 1)



    if imageData != nil
    {
        let request = NSMutableURLRequest(url: url)
        request.httpMethod = "POST"

        let loginString = String(format: "%@:%@", getUsername()!, getPassword()!)
        let loginData = loginString.data(using: String.Encoding.utf8)!
        let base64LoginString = loginData.base64EncodedString()

        request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

        let fieldName = "FieldName"

        let uniqueId = ProcessInfo.processInfo.globallyUniqueString
        let boundary = "------iOS\(uniqueId)"

        request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

        let postBody:NSMutableData = NSMutableData()
         var postData:String = String()

        postData += "--\(boundary)\r\n"
        postData += "Content-Disposition: form-data; name=\"\(fieldName)\"; filename=\"\(Int64(Date().timeIntervalSince1970*1000)).jpg\"\r\n"
        postData += "Content-Type: image/jpeg\r\n\r\n"
        postBody.append(postData.data(using: String.Encoding.utf8)!)
        postBody.append(imageData!)
        postData = String()
        postData += "\r\n"
        postData += "\r\n--\(boundary)--\r\n"
        postBody.append(postData.data(using: String.Encoding.utf8)!)

        request.httpBody = NSData(data: postBody as Data) as Data

        let session = URLSession.shared

        let task = session.dataTask(with: request as URLRequest) {
            (data, response, error) in

            let httpResponse = response as! HTTPURLResponse

            if httpResponse.statusCode >= 200 && httpResponse.statusCode < 300
            {
                guard let _:Data = data, let _:URLResponse = response , error
                    == nil else {
                        print("error")
                        return
                }

                self.uploadSuccessful()
            }
            else
            {
                let dataString = String(data: data!, encoding:
                    String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                print(dataString!)
                self.uploadFailed(errorMessage: dataString!)
            }     
        }
        task.resume()
    }
    else
    {
        uploadFailed(errorMessage: "No Data")
    }

}
public func uploadImage(docID:String,image:UIImage,comments:String,onCompletion:@escapippostcallresponse)
{
self.postCallback=onCompletion
let u=“\(图像上传)\(文档ID)&注释=\(注释)”
让urlString:String=u.replacingOccurrences(of:,with:“%20”)
打印(URL字符串)
guard let url=url(字符串:urlString)else
{
返回
}
设imageData=UIImageJPEG表示(图像,1)
如果imageData!=nil
{
let request=NSMutableURLRequest(url:url)
request.httpMethod=“POST”
let loginString=String(格式:“%@:%@”、getUsername()、getPassword()!)
让loginda=loginString.data(使用:String.Encoding.utf8)!
让base64LoginString=loginda.base64EncodedString()
request.setValue(“基本\(base64LoginString)”,用于httpheaderfield:“授权”)
让fieldName=“fieldName”
让uniqueId=ProcessInfo.ProcessInfo.globallyUniqueString
let boundary=“----iOS\(uniqueId)”
request.addValue(“多部分/表单数据;边界=\(边界)”,forHTTPHeaderField:“内容类型”)
let postBody:NSMutableData=NSMutableData()
var postData:String=String()
postData+=“--\(边界)\r\n”
postData+=“内容处理:表单数据;名称=\”\(字段名)\“文件名=\”\(Int64(日期().TimeIntervalence1970*1000)).jpg\”\r\n
postData+=“内容类型:图像/jpeg\r\n\r\n”
postBody.append(postData.data(使用:String.Encoding.utf8)!)
postBody.append(imageData!)
postData=String()
postData+=“\r\n”
postData+=“\r\n-->(边界)--\r\n”
postBody.append(postData.data(使用:String.Encoding.utf8)!)
request.httpBody=NSData(数据:postBody作为数据)作为数据
让session=URLSession.shared
let task=session.dataTask(其中:request作为URLRequest){
(数据、响应、错误)
让httpResponse=响应为!HTTPURLResponse
如果httpResponse.statusCode>=200&&httpResponse.statusCode<300
{
保护let:Data=Data,let:URLResponse=response,错误
==无其他{
打印(“错误”)
返回
}
self.uploadSuccessful()
}
其他的
{
让dataString=String(数据:data!,编码:
String.Encoding(rawValue:String.Encoding.utf8.rawValue))
打印(数据字符串!)
self.uploadFailed(错误消息:dataString!)
}     
}
task.resume()
}
其他的
{
上载失败(错误消息:“无数据”)
}
}
以下是我得到的回复:

<NSHTTPURLResponse: 0x7a6e4c80> { URL: http://url.com/images/up?docType=Image&docId=100&comment=Jhsgfdhsj } { status code: 500, headers {
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 36;
"Content-Type" = "application/json; charset=utf-8";
Date = "Mon, 30 Jan 2017 16:17:22 GMT";
Expires = "-1";
Pragma = "no-cache";
Server = "Microsoft-IIS/8.5";
"X-AspNet-Version" = "4.0.30319";
"X-Powered-By" = "ASP.NET";
} }
{URL:http://url.com/images/up?docType=Image&docId=100&comment=Jhsgfdhsj }{状态代码:500,标题{
“缓存控制”=“无缓存”;
连接=“保持活动”;
“内容长度”=36;
“内容类型”=“应用程序/json;字符集=utf-8”;
日期=“2017年1月30日星期一16:17:22 GMT”;
Expires=“-1”;
Pragma=“无缓存”;
Server=“Microsoft IIS/8.5”;
“X-AspNet-Version”=“4.0.30319”;
“X-Powered-By”=“ASP.NET”;
} }

URL是正确的,因为相同的URL在Android fine上工作。我甚至不知道代码有什么问题。请帮我解决这个问题。

这里的问题是压缩。我不得不将图像压缩从1更改为0.5。

@EricAya感谢您指出这一点。我会调查这件事的。但到现在为止,我甚至不需要这个。问题是500个错误,我无法解决。听起来你需要服务器端的人告诉你为什么主机对你发送的内容感到不安。我在这里找到了答案。我需要将图像压缩从1减少到0.5,因为让imageData=UIImageJPEGRepresentation(图像,0.5)