日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Retrofit2.0+ .Net MVC4(WebApi) 上传多张图片

發布時間:2025/7/14 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Retrofit2.0+ .Net MVC4(WebApi) 上传多张图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在做Android項目,使用的是MVP+Retrofit+rxjava+dagger的項目架構,RestFul 服務使用的.Net平臺的WebApi。由于業務中需要有多文件上傳的功能。所以在這里記載一下,便于以后查閱。

  • Android端Retrofit api 定義

    ?在這次上傳中,我們將實體類數據和文件數據一起上傳到服務端。所以只寫一個api就好

() Observable<HttpResult<String>>?addEvent(()?Event?entity,?()List<MultipartBody.Part>?parts);
  • 讀取文件并將其轉換成MuiltipartBody.Part 列表

List<MultipartBody.Part>?getFilesMap()?{=?ArrayList<MultipartBody.Part>();File?file?=?;{(!=?&&?.size()?>?)?{(String?path?:?)?{file?=?File(path);RequestBody?requestBody?=?RequestBody.(MediaType.(),?file);MultipartBody.Part?part?=?MultipartBody.Part.(,?file.getName(),?requestBody);.add(part);}}}?(Exception?e)?{e.printStackTrace();}; }
  • 調用Retrofit 進行網絡請求,并將實體類數據和文件數據一并發送到 服務端

addEvent()?{Event?entity?=?.getEntity();List<MultipartBody.Part>?fileMap?=?.getFilesMap();.clear();{Subscription?subscription?=?.getRetrofitInstance().create(EventInterface.).addEvent(entity,?fileMap).subscribeOn(.io()).observeOn(.ui()).subscribe(Subscriber<HttpResult<String>>()?{onCompleted()?{}onError(Throwable?e)?{.setLoadingIndicator();e.printStackTrace();}onNext(HttpResult<String>?httpResult)?{(httpResult.getResultCode()?!=?ConstData.HttpResult.)?{.setLoadingIndicator();}?{.setLoadingIndicator();}}});.add(subscription);}?(Exception?e)?{e.printStackTrace();}}
  • 在webapi 端對文件以及數據進行接收。由上面轉化MultipartBody?? 那一個環節我們可以看到,傳到服務端的數據是以HTTP形式傳送的。數據類型都是multipart/form-data類型的。所以我們在服務端要使用http相關協議來進行接收。

?

???????????????[HttpPost]public?HttpResult<string>?AddEvent(){//獲取EventET?的屬性HttpRequest?request?=?HttpContext.Current.Request;string?entity?=?request.Form[0];BaseBN?baseBN?=?new?BaseBN();EventET?et?=?baseBN.CTJsonSerializer<EventET>(entity);SystemBN?bn?=?new?SystemBN();et.EVENT_ID?=?bn.CreateID("EVENT",?HaiQu.N,?"EVENT_ID",?"EVENT",?EventType.YiYou);List<string>?addr?=?new?List<string>();//獲取上傳的文件HttpFileCollection?coll?=?request.Files;for?(int?i?=?0;?i?<?coll.Count;?i++){HttpPostedFile?file?=?coll.Get(i);String?filename?=?file.FileName.Substring(file.FileName.LastIndexOf("\\")?+?1);if?(!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("~/Upload/"?+?et.EVENT_ID)))//如果不存在就創建file文件夾{Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/Upload/"?+?et.EVENT_ID));}string?fileSavePath?=?string.Format("~/Upload/"?+?et.EVENT_ID?+?"/{0}",?filename);file.SaveAs(System.Web.HttpContext.Current.Server.MapPath(fileSavePath));addr.Add(fileSavePath);}EventBN?eventBN?=?new?EventBN();HttpResult<string>?result?=?eventBN.AddEvent(et,?addr,?HaiQu.N);return?result;}



  • 這里有幾點需要注意,實體類的數據,傳輸到服務端的時候,會以JSON字符串的形式傳輸到后臺。這樣的話,在后臺使用的時候,需要對其進行反序列化。

  • 另外,上傳的文件,在HTTP中是以集合的形式存在,直接取出來,存儲到本地就好。有一點需要注意的是,由于IIS對上傳文件的限制,需要提前修改一下允許上傳文件的上限。要不然,會上傳不成功(這些都是已經踩過的坑)。


  • 說在最后,其實上傳文件很簡單,網上有很多的大神已經講解的非常詳細。之所又自己啰嗦了一下,是因為,在做的過程中,踩了很多的坑,而且網上大多數人都只寫了Android端,沒有寫服務端。再加上,.NET WebApi 用的人比較小眾,所以就記錄了一下。以后有時間會補上Spring 作為服務端的寫法。以及Struts作為服務端的寫法。


  • 今天就到這里吧。

轉載于:https://blog.51cto.com/xiaoshuaigege/1878634

總結

以上是生活随笔為你收集整理的Retrofit2.0+ .Net MVC4(WebApi) 上传多张图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。