android - 如何将文件映射上传到php服务器

标签 android retrofit2

我想将多个附加到帖子的文件发送到 Laravel 后端。它们都应该位于名为 media 的字段中,该字段是一个将文件类型映射到实际文件的数组。这是后端期望的表示:

'media' => [
    'image' => UploadedFile,
    'video' => UploadedFile,
    'music' => UploadedFile,
   // other type of files
]

我已经尝试了很多来自 Internet 的解决方案。如果我使用 @Query 注释后端接收结构正确,但文件没有按预期接收。如果我使用 @Part 注释,我无法发送命名数组(即 media)。

最佳答案

我自己通过反复试验找到了解决方案。

下面是我的路由接口(interface)中对应的方法:

@Multipart
@POST("posts")
Call<ResponseBody> createPost(
    @Part ArrayList<MultipartBody.Part> files
    //other parameters
);

每当在您的代码中打包要发送的数据时,初始化一个 ArrayList 并添加如下文件:

RequestBody reqFile;

reqFile = RequestBody.create(MediaType.parse(mimeType), file);

ArrayList<MultipartBody.Part> partArrayList = new ArrayList<>();
partArrayList.add(MultipartBody.Part.createFormData("media[image]",file.getName(),reqFile));
partArrayList.add(MultipartBody.Part.createFormData("media[video]",file.getName(),reqFile));

route.createPost(
    partArrayList
    /*other_parameters*/
);

关于android - 如何将文件映射上传到php服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543655/

相关文章:

android - 我在哪里可以找到 Android Studio 2.2 中的测试 Artifact 选择器?

android - 如何使用 RxJava 和 retrofit 2 从多个 API 获取数据

java - Retrofit2不发送POST数据

java - 使用 java 通过 .bat 运行 busybox

android - 即使没有互联网连接,也强制在 Android 中使用特定网络

java - 在 Retrofit 调用后更改折叠工具栏标题

android - Retrofit 2.0 处理 json 响应中的错误

java.lang.NullPointerException : Attempt to invoke virtual method on a null object reference Retrofit

java - 错误: void cannot be dereferenced

java - 如何在不关闭APP(甚至显示对话框)的情况下发送ACRA异常报告