【问题标题】:How to upload multiple image files with JSON to server from android?如何将多个带有 JSON 的图像文件从 android 上传到服务器?
【发布时间】:2020-07-06 06:56:48
【问题描述】:

我必须从 android 上传包含在 JSON 中的多个图像。

{
       "topicId" : 1,
       "QuizTest": [
            {
                "question": "This first question for test",
                "Image" : "file:///D:/Images/fb_logo.png",
                "isTrue" : 3,
                "OptionFor":
                    {
                        "1" : "i am option 1",
                        "2" : "i am option 2",
                        "3" : "i am option 3",
                        "4" : "i am option 4"
                    }
                
            },
            {
                "question": "This second question for test",
                "Image" : "",
                "isTrue" : 2,
                "OptionFor": 
                    {
                        "1" : "i am  2 option 1",
                        "2" : "i am 2 option 2"
                     }
                
            },
            {
                "question": "This third question for test",
                "Image" : "file:///D:/Images/icon.png",
                "isTrue" : 1,
                "OptionFor": 
                    {
                        "1" : "i am 3 option 1",
                        "2" : "i am 3 option 2",
                        "3" : "i am 3 option 3",
                        "4" : "i am 3 option 4",
                        "5" : "i am 3 option 5"
                     }
                
            }
        ]
}

我有这样的数据要上传。

我尝试过使用凌空、android 网络。但是我不确定我是否可以上传这样的文件。

我已经上传了正文中的 json。不工作。请帮忙。

【问题讨论】:

    标签: android json file-upload android-volley fast-android-networking


    【解决方案1】:

    您可以将 Retrofit 用于 API 调用,您可以将有效负载发送为 @Body 或 API 提供商要求的任何内容。您可以在 Retrofit builder 中设置 Gson 转换器,这样您就不必编写普通的 Json 对象。

    如果你使用 Kotlin,你可以编写如下数据类

    data class Options(
      val 1: String,
      val 2: String,
      val 3: String,
      val 4: String,
      val 5: String 
    )
    data class Question(
      val question: String,
      val Image: String,
      val isTrue: Int,
      val OptionFor: Options
    )
    data class Test(
      val topicId:Long,
      val QuizTest: Questions
    )
    

    然后您可以在 API 调用中将它们作为有效负载发送

    @POST("{api_end_point}")
    fun sendData(@Body test: Test)
    

    【讨论】:

    • 我已准备好上传 JSON 数据,如上述问题中所述。这也会上传图片文件吗?
    • 没有@SachinHarne,因为你需要使用(@Part file: MultipartBody.Part) 格式。基本上Retrofit 允许您将文件作为多部分数据上传,您可以在他们的官方文档中阅读。
    • 考虑单独上传文件,同时从存储中选择它们,最后在最终有效负载中发送图像 url。
    • 是的,我可以将文件作为 Multipart 与最终有效负载分开上传。所以你的意思是说我不能只用这个JSON上传这个,我必须分别上传文件和JSON,对吗?
    • 是的@SachinHarne。您也可以将文件与 Body 参数一起上传,但在这种情况下,您的服务器需要很聪明才能将这些文件映射到它们各自的对象。所以,只喜欢前一种解决方案。
    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多