Retrofit 上傳多檔案幾種方式

2021-10-24 03:03:52 字數 2695 閱讀 3372

retrofit 上傳多檔案方式:

一 .multipart & multipartbody.part:

api service:

//上傳多個檔案.單檔案就把list去掉

@multipart

@post

(wx_url)

call

uploadgatherinfo

(@partmap map

params,

@part list

files)

;

params :額外的屬性引數

files:檔案引數

註解partmap對應的map(這裡指params)的value有2種方式處理

1.如果value的型別是okhttp3.requestbody requestbody,該值將與它的內容型別直接使用。

2.其他物件型別將通過使用 converter 轉換為適當的表示形式。

send request:

mapbodymap = retrofittransutil.map2requestbody(transparams);

listmultipart = retrofittransutil.map2multipart(fileparams);

if (multipart == null)

//同步

responseresponse = requestservice.getwxservice().

uploadgatherinfo(bodymap, multipart).execute();

//非同步

requestservice.getwxservice().

uploadgatherinfo(bodymap, multipart).enqueue(...);

因為封裝傳的額外引數是maptransparams ,要把transparams轉換成map

傳的file引數是mapfileparams ,要把fileparams轉換成 list

public

class

retrofittransutil

public

static multipartbody.part file2part

(string name,file file)

public

static requestbody string2requestbody

(string param)

public

static map

map2requestbody

(map

params)

/*if (entry.getvalue() instanceof file) else */}}

}return map;

}public

static list

map2multipart

(map

params)

else

/*if (entry.getvalue() instanceof file) else */}}

}return parts;

}

二 .multipart & requestbody:
//上傳檔案

@multipart

@post("upload")

calluploadfile(@part("file") requestbody file);

註解part對應引數型別以下三種方式之一處理:

1.如果型別是multipartbody.part,內容將直接使用。從註解中省略名稱(例如,@part multipartbody.part part})。2.如果型別是okhttp3.requestbody requestbody,該值將與它的內容型別直接使用。在註解中提供part名稱(例如,@part(「foo」) requestbody foo)

3.其他物件型別將通過使用 converter轉換為合適的表示形式。在註解中提供part名稱(例如,* )

requestbody bodysingle = requestbody.create(multipartbody.form,file);

requestbody body = requestbody.create(mediatype.parse(「image/jpeg」),file)

當然你也可以用@partmap mapmap 來上傳多個檔案,不過要拼接form引數 「file」; filename=""+ your file name 作為key, requestbody作為value

參考:三:body

@post

("/upload.php"

)public call

upload

(@body requestbody file)

;

這種方式函式不可以使用@multipart註解和@formurlencoded註解,並且@body註解只能使用一次,函式的引數型別沒有要求,只要可以通過convert轉換成requestbody就行,不過上傳檔案一般用直接用requestbody。如果使用multipartbody型別作為引數,一定要設定type為multipartbody.form

參考:這種方法,我沒有用過o(∩_∩)o

Retrofit上傳頭像

retrofit retrofit new retrofit.builder baseurl addconverte ctory gsonconverte ctory.create gson工廠類 build githubapi api retrofit.create githubapi.class...

rxjava2 retrofit上傳檔案示例

service請求引數 請求過程 核心部分 requestbodyrequestfile requestbody.create mediatype.parse multipart form data file multipartbody.partbody multipartbody.part.cre...

多檔案上傳

這是我開發過程中用涉及到的乙個功能,現在備份下來。首先是在 web.confing 中做限制上傳大小配置和超時的配置,的節點下有 executiontimeout maxrequestlength兩個屬性。executiontimeout設定超時的時間值,預設的為90秒,如果超出這個時間,瀏覽器就會...