使用Alamofire分段上传时的HTTP状态415

时间:2016-04-28 23:52:29

标签: swift rest jersey alamofire

我试图将图片上传到RESTful网络API并且我获得了HTTP状态415(不支持的媒体类型)。奇怪的是,前几天我确实让它工作了,我不确定我已经改变了什么让它停止接受POST请求。

我的快捷代码:

func uploadImage(image: UIImage, userId: String, completion: () -> Void) {
    parameters["userId"] = userId

    let imageData = UIImageJPEGRepresentation(image, 70)
    let urlRequest = urlRequestWithComponents(myUrl, parameters: parameters, imageData: imageData!)

    Alamofire.upload(urlRequest.0, data: urlRequest.1)
        .responseJSON { (response) in
            print(response)
            if let result = response.result.value as? Dictionary<String, String>{
                print("have a result from uploading!")
                print(result)
                if let result = result["success"] {
                    if (result == "true") {
                       completion()
                    }
                }
            }
        }
}


func urlRequestWithComponents(urlString:String, parameters:Dictionary<String, String>, imageData:NSData) -> (URLRequestConvertible, NSData) {


    // create url request to send
    let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!)
    mutableURLRequest.HTTPMethod = Alamofire.Method.POST.rawValue
    let boundaryConstant = "myRandomBoundary12345";
    let contentType = "multipart/form-data"
    mutableURLRequest.setValue(contentType, forHTTPHeaderField: "Content-Type")



    // create upload data to send
    let uploadData = NSMutableData()

    // add image
    uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    uploadData.appendData("Content-Disposition: form-data; name=\"file\"; filename=\"file.png\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    uploadData.appendData("Content-Type: image/png\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    uploadData.appendData(imageData)

    // add parameters
    for (key, value) in parameters {
        uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        uploadData.appendData("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".dataUsingEncoding(NSUTF8StringEncoding)!)
    }
    uploadData.appendData("\r\n--\(boundaryConstant)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)



    // return URLRequestConvertible and NSData
    return (Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0, uploadData)
}

以下是我的泽西休息服务接受的网址:

@POST
@Path("/uploadImage")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadImage(FormDataMultiPart form) throws IOException
{
    //do stuff
}

它让我疯狂地试图弄清楚出了什么问题,非常感谢任何帮助!

0 个答案:

没有答案