Retrofit2 上传图片等文件

普通写法:

//创建表单的普通字段public static RequestBody createFormBody(String content) {
  RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), content);
  return body;
}
//创建Multipart, fieldName为表单字段名
public static MultipartBody.Part createFilePart(String fieldName, File file) {
  RequestBody requestFile = RequestBody.create(MediaType.parse("application/otcet-stream"), file);
  MultipartBody.Part body = MultipartBody.Part.createFormData(fieldName, file.getName(), requestFile);
   return body;
}
//Service方法, 普通form表单使用RequestBody, 并且@Part注解要写表单字段名
//文件用MultipartBody.Part
@Multipart
@POST(API.VIDEO_MODULE_UPLOAD_VIDEO)
Call<Object> uploadImage(@Part MultipartBody.Part imagePicFile,
                         @Part MultipartBody.Part videoFile,
                         @Part("videoDescription") RequestBody desc,
                         @Part("videoPicWidth") RequestBody videoPicWidth,
                         @Part("videoPicHeight") RequestBody videoPicHeight);
   
//上传
getService(VideoService.class).uploadVideo(
                createFilePart("videoPicFile",new File(mCoverPath)),
                createFilePart("videoFile",new File(mPath)),
                createFormBody(etVideoDesc.getText().toString().trim()),
                createFormBody(width),
                createFormBody(height))
                .enqueue(new JsonResultCallback<Object>(context()) {
                    @Override
                    public void onSuccess(Call<Object> call, Object data) {
                        super.onSuccess(call, data);
                        //.....
                    }
                    @Override
                    public void onFinish(Call<Object> call) {
                        //...
                    }
                });

注意: 如果你使用了 GsonRequestBodyConverter 或类似的RequestBodyConverter, 一定记得要略过@Multipart 标注的Service方法, 否则你的File会被转为文件路径的字符串, 这是一个坑

  

另一种, 自定义FileRequestBodyConverter:

未完待续...

相关链接, 这里有实现

时间: 2024-10-06 17:07:42

Retrofit2 上传图片等文件的相关文章

C# WinForm 上传图片,文件到服务器的方法Uploader.ashx

网上有很多方案,起初用时,因为对asp.net不太了解,觉得FTP实现不错,可是后来发现,如果机器在域控下,就会有问题. 一年过去了,asp.net也熟悉了,知道ajax没事应该用ashx,验证码也用ashx,当然这里要说的WinForm上传也应该是ashx了吧,哈哈,先提供简单思路: 接收文件的asp.net是:Uploader.ashx,相关代码: view plaincopy to clipboardprint? <%@ WebHandler Language="C#" C

解决selenium自动化上传图片或文件出现windows窗口问题

在实际工作中,会经常遇到上传图片或文件的操作,有的是input标签的,有的是非input标签属性的.他们都有一个共同的特性会出现windows的弹出窗. 下面说下出现windows的弹出窗后怎么解决:总共2个步骤 1,首先点击打开,待出现选择文件的弹出窗后: 2,调用我下面这个函数: 提示:调用此方法需要在打开windows上传文件的系统窗口后再调用 (该方法适用于谷歌驱动) '''实现非input标签上传文件,调用此方法需要打开windows上传文件的系统窗口再调用''' import win

关于Asp.Net Mvc3.0 使用KindEditor4.0 上传图片与文件

http://blog.csdn.net/fyxq14hao/article/details/7245502 今天我们的Asp.Net Mvc 3的项目中,把KindEditor3.9改为 KindEditor4.0 .修改了js文件的引用后,发现还是无法上传图片,最后发现时图片上传中的参数名修改了  从imageUploadJson 改为了uploadJson. <script type="text/javascript">var editor;var options =

Ueditor 1.4.3 单独调用上传图片,或文件功能

第一步, 引入文件 <script src="ueditor/ueditor.config.js" type="text/javascript" charset="utf-8"></script> <script src="ueditor/ueditor.all.min.js" type="text/javascript" charset="utf-8"&g

在.net MVC中异步上传图片或者文件

今天用到了MVC异步上传图片,找了半天写下来以后方便查找异步提交图片需要一个MyAjaxForm.cs             地址http://pan.baidu.com/s/1i3lA693 密码txgp 前台代码 @using (Ajax.BeginForm("AddMessages", "MenuInfo", new AjaxOptions { HttpMethod = "post", OnSuccess = "Successd

android使用wcf接收上传图片视频文件

一.Android 权限配置文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.niewei.updatefile" android:versionCode="1" android:versio

上传图片或者文件

以后绝对会用到  使用ajax上传文件或者图片 urls: from django.contrib import admin from django.urls import path from one import views urlpatterns = [ path('admin/', admin.site.urls), path('upload_img/',views.upload_img), #上传图片 path('form_data_upload/',views.form_data_up

python测试开发django-47.xadmin上传图片和文件

前言 xadmin上传图片和上传文件功能 models模块设计 先设计一个model,用ImageField存放图片,FileField放文件,upload_to参数是存放的目录 # models.py from django.db import models from django.utils import timezone # Create your models here. class FileImage(models.Model): '''上传文件和图片''' title = model

用ueditor上传图片、文件等到七牛云存储

ueditor上传文件,是用数据流的形式上传的. 而七牛云存储官方文档中,只提供了文件路径上传的方式. 但是,仅仅是在官方文档中写了这一种方式. 事实上,利用VS的对象管理器,打开Qiniu的dll,我们可以看到以下东西: 其实Qiniu提供的SDK中,是可以利用文件流上传文件的. 所以,根据官方文档提供的案例,我们可以将上传改写成下面的样子: /// <summary> /// 上传文件 /// </summary> /// <param name="key&qu