当前位置: 首页 > 知识库问答 >
问题:

使用Alamofire 5上传文件到Rocketchat服务器

海翔宇
2023-03-14

我使用的是Alamofire 5,我正试图将图像上传到火箭聊天服务器。我需要使用AF复制的对应curl语句位于以下链接:(链接到文档:https://docs.rocket.chat/api/rest-api/methods/rooms/upload)

我一直在尝试使用multipartFormData上传,但没有成功。我还试图完全绕过Alamofire,使用Swift URLSession。我所能做的就是从服务器获取相同的错误消息,即“errorType”:无效字段

我现在的代码:

let url = URL_MESSAGES + "rooms.upload/\(_group._id ?? "")"
    
let boundary = UUID().uuidString

let headers: HTTPHeaders = [
    
"X-Auth-Token": authToken,
    "X-User-Id": me._id ?? "",
    "Content-type":"multipart/form-data; boundary=\(boundary)"
]

if let data = image.jpeg(.medium) {
        
    print(data.count)
        
    AF.upload(
        multipartFormData: { multipartFormData in
                multipartFormData.append(data, withName: "image", fileName: "image.jpeg", mimeType: "image/jpeg")
        },
            to: url, method: .post , headers: header)
            .response { resp in
                print(resp)

        }
        .cURLDescription { description in
            print(description)
        }
        .responseString { [weak self] (response) in
            
            DispatchQueue.main.async {                 
                if response.error == nil {
                    
                    guard let data = response.data else {
                        return completion(true,[:])
                    }

                    if let json = try? JSON(data: data) {

                        let dictionaryIn = json.rawValue as! [String : Any]

                        if (self?.isSuccess(data: dictionaryIn))! {
                            completion(true,json.rawValue as! [String : Any])
                        }else{
                            completion(false,[:])
                            self?.handleError(data: dictionaryIn)
                        }
                    }

                }else{
                        completion(false,[:])
                        self?.handleError(data: [:])
                }
            }
        }
    }
}

共有2个答案

丌官凯康
2023-03-14

当我改变这一点时,上面的代码非常有效:

 AF.upload(
    multipartFormData: { multipartFormData in
            multipartFormData.append(data, withName: "image", fileName: "image.jpeg", mimeType: "image/jpeg")

到:

 AF.upload(
    multipartFormData: { multipartFormData in
            multipartFormData.append(data, withName: "file", fileName: "image.jpeg", mimeType: "image/jpeg")

将“图像”替换为“文件”修复了所有问题。我选择了“图像”,因为这是我能找到的每一个阿拉莫菲尔html" target="_blank">教程都说要做的。但是,RocketChat要求它是“文件”。它在文档中,但我没有意识到这是它告诉我要做的。具体而言,在文件中,它说:

“注意:对于通过curl上传的某些文件类型,您可能需要设置mime类型。对于某些文件类型,curl将以应用程序/八位字节流的形式上传文件。您可以传递如下自定义mime类型:-F”file=@file.wav;类型=音频/wav“”

从Alamofire翻译过来时,我正在尝试-F“image=@file.wav;type=audio/wav”。它需要:-F“file=@file.wav;type=audio/wav”

暴阳州
2023-03-14

我认为你试图设定自己的边界,从而破坏了上传。Alamofire会自动为您服务。尝试删除标头。

 类似资料:
  • 在Django python服务器上,我定制了一个用户可以上传文件的URL。现在的问题是,当我点击浏览器时,我能够成功地上传文件,但当我使用curl尝试同样的事情时,我无法做到这一点。 意见。派克 ........ ........ ........ ........ 名单。html 在浏览器上 在终点站,我试过了 我尝试了一些其他的变化,但似乎没有成功。我还尝试了一些其他命令,它们给出了“无cs

  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 是否可以使用server1将文件上传到server2? 访客请访问:我的网站。com(server1) 然后他将一个文件上传到server1,server1会自动将该文件上传到server2?? 或者简单地说,用户可以使用server1作为代理将文件上传到server2,因为server2只能从server1访问 会有帮助吗,还是有其他更好的解决方案?

  • 本文向大家介绍Java使用SFTP上传文件到服务器的简单使用,包括了Java使用SFTP上传文件到服务器的简单使用的使用技巧和注意事项,需要的朋友参考一下 最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询。具体代码如下所示: 这里的用户名密码都是自己设置,这里的方法进行了简单的封装,方便使用。 以上所述是小编给大家介绍的Java使用SFTP上传文件到服务器的简单使用,希望对

  • 问题内容: 以下是我用于将文件上传到服务器的代码。但是,即使经过几次尝试,甚至添加了严格模式,我都遇到了网络异常。 我是Android的新手,不知道如何使用异步任务,许多人建议您使用这种异步网络操作。谁能告诉我代码中哪里有错误以及应该在哪里使用异步任务? 问题答案: 有关更多信息,请参考此链接 http://vikaskanani.wordpress.com/2011/01/29/android-

  • 如何将文件发送到WebService?为了上传文件,我需要使用multipart/form-data;我想知道如何使用PHP中的curl来实现这一点。 我的代码是: 服务器上的故障是: 我怎样才能解决这个问题?