AndroidRetrofit2.0框架上傳圖片解決方案(一張與多張的處理)
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010046908/article/details/50608182
標題: Android Retrofit 2.0框架上傳圖片解決方案(一張與多張的處理)
1.單張圖片的上傳
/**
* 上傳一張圖片
* @param description
* @param imgs
* @return
*/
@Multipart
@POST("/upload")
Call<String> uploadImage(@Part("fileName") String description,
@Part("file"; filename="image.png"")RequestBody imgs);
2.多張圖片的上傳
/**
* 上傳三張圖片
* @param description
* @param imgs
* @param imgs1
* @param imgs3
* @return
*/
@Multipart
@POST("/upload")
Call<String> uploadImage(@Part("fileName") String description,
@Part("file"; filename="image.png"")RequestBody imgs,
@Part("file"; filename="image.png"")RequestBody imgs1,
@Part("file"; filename="image.png"")RequestBody imgs3);
注意:目前是提供傳3張,要想多上傳目前我發現的方法就是想要多傳一張,就多增加一個引數
@Part(“file”; filename=”image.png””)RequestBody imgs,以此類推。
大家看到上面覺得寫法很漏,但是用於能力有限,只能想到這樣。用Java中的可變引數解決之後,就只能傳一張。不能多張。
@Multipart
@POST("/upload")
Call<String> uploadImage(@Part("fileName") String description,
@Part("file"; filename="image.png"")RequestBody ...imgs);
呼叫:
Call<String> call = apiManager.uploadImage( m[0],requestBody1,requestBody2,null);
這樣寫看上去很是高階,不幸的是只能傳一張
3.最後是實現胡過程
3.1建立FileUploadService介面
public interface FileUploadService { /** * 上傳一張圖片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file"; filename="image.png"")RequestBody imgs); /** * 上傳三張圖片 * @param description * @param imgs * @param imgs1 * @param imgs3 * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file"; filename="image.png"")RequestBody imgs, @Part("file"; filename="image.png"")RequestBody imgs1, @Part("file"; filename="image.png"")RequestBody imgs3); }
3.2建立Retrofit物件
private static final Retrofit sRetrofit = new Retrofit .Builder() .baseUrl(ENDPOINT) .addConverterFactory(GsonConverterFactory.create()) // .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 使用RxJava作為回撥介面卡 .build(); private static final FileUploadService apiManager = sRetrofit.create(FileUploadService.class);
3.3呼叫上傳的方法
public static void upload(String path){ String descriptionString = "hello, this is description speaking"; String[] m = new String[2]; m[0]= "share.png"; m[1]= "Screenshot_20160128-140709.png"; File[] ssssss= new File[2]; File file1 = new File("/storage/emulated/0/sc/share.png"); File file = new File("/storage/emulated/0/Pictures/ScreenShots/Screenshot_20160128-140709.png"); ssssss[0]=file; ssssss[0]=file1; RequestBody requestBody[] = new RequestBody[3]; RequestBody requestBody1 = RequestBody.create(MediaType.parse("multipart/form-data"), file); RequestBody requestBody2 = RequestBody.create(MediaType.parse("multipart/form-data"), file1); requestBody[0]=requestBody1; requestBody[1]=requestBody2; Call<String> call = apiManager.uploadImage( m[0],requestBody1,requestBody2,null); call.enqueue(new Callback<String>() { @Override public void onResponse(Response<String> response, Retrofit retrofit) { Log.v("Upload", response.message()); Log.v("Upload", "success"); } @Override public void onFailure(Throwable t) { Log.e("Upload", t.toString()); } }); }
4.伺服器段程式碼:
伺服器用的是struts接收:
@Controller
public class GetToken extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private File[] file;
private String[] fileName;
public File[] getFile() {
return file;
}
public void setFile(File[] file) {
this.file = file;
}
public String[] getFileName() {
return fileName;
}
public void setFileName(String[] fileName) {
this.fileName = fileName;
}
@Action("/upload")
public void login() {
System.out.println("------"+Arrays.toString(file));
System.out.println("------"+Arrays.toString(fileName));
}
}
上傳胡結果:
——[ mpupload__4348b3f0_1528c3d9735__8000_00000038.tmp, mpupload__4348b3f0_1528c3d9735__8000_00000040.tmp]
——[“share.png”]
2016-1-29 16:59:04 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
資訊: Removing file file mpupload__4348b3f0_1528c3d9735__8000_00000038.tmp
——[“share.png”]
2016-1-29 16:59:04 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
資訊: Removing file file mpupload__4348b3f0_1528c3d9735__8000_00000038.tmp
2016-1-29 16:59:04 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
資訊: Removing file file mpupload__4348b3f0_1528c3d9735__8000_00000040.tmp
資訊: Removing file file mpupload__4348b3f0_1528c3d9735__8000_00000040.tmp
總共就這些吧。有問題大家在下面說。QQ1561281670
追加:
多圖上傳的一種簡單那寫法:
</pre><pre name="code" class="java">public static void uploadMany(ArrayList<String> paths,String desp){
Map<String,RequestBody> photos = new HashMap<>();
if (paths.size()>0) {
for (int i=0;i<paths.size();i++) {
photos.put("photos"+i+""; filename="icon.png", RequestBody.create(MediaType.parse("multipart/form-data"), new File(paths.get(i))));
}
}
Call<String> stringCall = apiManager.uploadImage(desp, photos);
stringCall.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.d(TAG, "onResponse() called with: " + "call = [" + call + "], response = [" + response + "]");
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.d(TAG, "onFailure() called with: " + "call = [" + call + "], t = [" + t + "]");
}
});
}
這樣洗是不是比上面的好多了。如果再有什麼好的寫法,請提出來。我在改進
相關文章
- JS—圖片壓縮上傳(單張)JS
- js中圖片上傳,多次上傳同一張不生效JS
- 輕鬆復現一張AI圖片AI
- 你一定也上傳過的11張社交網路圖片
- 圖片上傳及圖片處理
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- 一張詳解SQL連線的圖SQL
- JavaScript中的圖片處理與合成(一)JavaScript
- undo表空間資源緊張的解決方案
- 給一個塊元素新增多張背景圖片
- 處理網頁圖片最常見的10個錯誤及其解決方案網頁
- DDGScreenShot —iOS 圖片處理--多圖片拼接 (swift)iOSSwift
- 002.01 圖片去外框處理
- 圖片上傳處理架構架構
- 圖片上傳方案詳解
- 解決【element】img圖片列表點選預覽總是從第一張開始的問題
- 前端圖片解決方案前端
- url-loader不能處理html中引入的圖片問題的解決方案HTML
- 幾張產生視覺錯覺的圖片視覺
- QQ空間無法上傳多張圖片解決方案
- spring 對上傳圖片處理Spring
- PHP GD庫解析一張簡單圖片並輸出PHP
- php將兩張身份證圖片合併到一張圖PHP
- Python操作excel(將多張excel表融合到一張表)PythonExcel
- 前端處理小圖示的那些解決方案(圖文實操)前端
- 移動端圖片上傳旋轉、壓縮的解決方案
- ZT:處理Oracle資料庫中一張有效的Drop大表Oracle資料庫
- 更新一張與另一張表關聯的連線欄位記錄
- 使用lua+redis解決發多張券的併發問題Redis
- JavaScript中的圖片處理與合成(四)JavaScript
- JavaScript中的圖片處理與合成(二)JavaScript
- 打造一張合格的遊戲封面有多難?遊戲
- SD圖片處理 記憶體瘋長的解決辦法記憶體
- 用 UI 多執行緒處理 WPF 大量渲染的解決方案UI執行緒
- 分享一個圖片處理類
- 一張流程圖 向你解釋 瀏覽器如何工作流程圖瀏覽器
- 用一張GIF圖解釋響應式設計圖解
- opencv圖片處理與OCR識別OpenCV