android - 使用 OkHttp 分段上传大文件

标签 android file-upload upload okhttp

在 Android 中使用 OKhttp 在多部分中上传单个大文件(更具体地说,到 s3)有哪些选择?

最佳答案

获取 OkHttp 2.1,并使用 MultipartBuilder.addFormDataPart() 将文件名作为参数。

       /**
         * Upload Image
         *
         * @param memberId
         * @param sourceImageFile
         * @return
         */
        public static JSONObject uploadImage(String memberId, String sourceImageFile) {
    
            try {
                File sourceFile = new File(sourceImageFile);
    
                Log.d(TAG, "File...::::" + sourceFile + " : " + sourceFile.exists());
             //Determining the media type        
             final MediaType MEDIA_TYPE = sourceImageFile.endsWith("png") ? 

                MediaType.parse("image/png") : MediaType.parse("image/jpeg");
                
    
                RequestBody requestBody = new MultipartBuilder()
                        .type(MultipartBuilder.FORM)
                        .addFormDataPart("member_id", memberId)
                        .addFormDataPart("file", "profile.png", RequestBody.create(MEDIA_TYPE, sourceFile))
                        .build();
    
                Request request = new Request.Builder()
                        .url(URL_UPLOAD_IMAGE)
                        .post(requestBody)
                        .build();
    
                OkHttpClient client = new OkHttpClient();
                Response response = client.newCall(request).execute();
                return new JSONObject(response.body().string());
    
            } catch (UnknownHostException | UnsupportedEncodingException e) {
                Log.e(TAG, "Error: " + e.getLocalizedMessage());
            } catch (Exception e) {
                Log.e(TAG, "Other Error: " + e.getLocalizedMessage());
            }
            return null;
        }

#Edited for okhttp3:

compile 'com.squareup.okhttp3:okhttp:3.4.1'

RequestBody 替换为:

RequestBody requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("uploaded_file", filename, RequestBody.create(MEDIA_TYPE_PNG, sourceFile))
                    .addFormDataPart("result", "my_image")
                    .build();

#在 GITHUB 上上传演示: ##我已经为 Multiple Image Upload 添加了我的答案:)

关于android - 使用 OkHttp 分段上传大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279563/

相关文章:

android - XamSVG 用于 Android 上的 Xamarin 表单 : some images not showed in Marshmallow

c# - 带输出的命令行病毒扫描

javascript - 如何在保证在Android中工作的网页中制作输入类型="file"字段?

java - Servlet 处理文件上传,为什么比原来的大?

Python:通过 FTP 上传大量文件

python - 图片上传后出现错误

Android AWS SDK 只返回一个 EC2 实例而不是列表

android - 使用 SimpleCursorAdapter 从 Cursor 更改值

java - Gradle 2 android 项目使用相同的库

java - "Forwarding"用Java上传图片