【问题标题】:Getting image path for API post request - Swift, iOS获取 API 发布请求的图像路径 - Swift、iOS
【发布时间】:2020-11-30 15:59:35
【问题描述】:

我正在使用 API 发布请求来获取修改后的图像。

curl \
    -F 'image=@/path/to/your/file.jpg' \
    -H 'api-key:[myKey]' \
    [api url]

它直接在我的 Mac 终端上运行良好:

curl \
    -F 'image=@/Users/user/image.jpg' \
    -H 'api-key:[myKey]' \
    [api url]

尝试在 iOS 应用程序中使用它,我正在努力获取图像路径。

该 api 使用另一个使用图像 url 的参数与 Alamofire 一起使用。所以我想把图片上传到服务器并使用那个url,但是如果我可以直接使用path参数会更好。

这是我尝试过的,但它不起作用。

func imagePath(_ image: UIImage, handler: @escaping (String?) -> Void ) {

    let path = NSTemporaryDirectory()
        .appending(UUID().uuidString)
        .appending("png")
    
    let url = URL(fileURLWithPath: path)
    
    let data = image.pngData()
    
    let urlForApi = "@" + path
    
    do {
        
        try data?.write(to: url)
        
        //  Just to check if write above works, it always works fine
        let postData = try UIImage(data: Data(contentsOf: url))
        
        handler (urlForApi)
        
    } catch {
        
        handler (nil)
        
    }
        
}

它返回处理程序(urlForApi),但请求出错。我没有得到用于请求的正确路径。

【问题讨论】:

  • 首先let urlForApi = "@" + path /Users/user/绝对路径与NSTemporaryDirectory()有很大不同

标签: ios swift api rest webapi


【解决方案1】:

我可以使用 Alamofire 上传请求来解决它。


func getPostURL(`fromImage` preImage: UIImage?, postImageURL: @escaping (_ outputImageURL: String) -> (), error: @escaping (_ error: Error?) -> ()) {
        
        if let safeImage = preImage {
            
            let data = safeImage.pngData()!
            
            AF.upload(multipartFormData: { (form) in
                form.append(data, withName: "image", fileName: "image.png", mimeType: "image/png")
            }, to: apiURL!, headers: headers).validate(statusCode: okStatusCodes).responseDecodable(of: ImageResponse.self) {
                
                response in
                
                if let url = response.value?.output_url {
                    postImageURL(url)
                } else {
                    error(response.error)
                }
                
            }
            
        } else {
            error(ImageDataError.gettingPostURL)
        }
        
        
    }

但是,知道如何获取文件的临时路径会很有趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多