Retrofit 2使用要點梳理:淺析POST檔案/表單上傳
實習期的第一個任務就是為專案組預研FACE++智慧人臉識別這一新功能。呼叫曠視FACE++人臉識別介面,進行人臉識別有兩種方式:一是通過先上傳圖片到雲端儲存網站(網盤,雲盤,七牛雲等)獲得圖片檔案對應的URL引數,通過圖片的網路URL引數呼叫FACE++介面;二是在手機客戶端直接上傳檔案呼叫FACE++介面。第二種方式需要通過POST
請求方式上傳圖片檔案的二進位制資料,而我們選擇用Retrofit 2來實現這一功能。接下來主要分析第二種情況。請求URL介面呼叫示例如下:
https://api-cn.faceplusplus.com/facepp/v3/detect/detection?api_key=YOUR_API_KEY&api_secret=YOUR_API_SECRET&img_file=YOUR_IMAGE_FILE&return_attributes=YOUR_ATTRIBUTE
其中:api_key
與api_secret
欄位分別表示你在官網建立應用時建立的對應api_key
和api_secret
,img_file
欄位表示要上傳的圖片檔案的二進位制資料,需要用post multipart/form-data
方式上傳;return_attributes
欄位表示需要獲取的人臉屬性,我們這裡獲取人臉對應的性別和年齡資料即可。
Retrofit 2定義網路請求是通過註解的方式,所以自然我們這裡就用到了@POST
註解來提交我們的圖片檔案的二進位制資料,需要注意用@Part MultipartBody.Part
註解來定義我們要上傳的圖片檔案,用@Part("attribute") RequestBody
public interface DetectService { @Multipart //請求體有多部分,使用@MultiPart上傳 @POST("detection/detect") //URL,可以為空 Call<PhotoBean> detect( @Part("api_key") RequestBody request_api_key, @Part("api_secret") RequestBody request_api_secret, @Part MultipartBody.Part request_img_part, @Part("attribute") RequestBody request_attribute ); }
接下來,我們需要在MainActivity
中呼叫DetectService
介面定義的detect()
方法發起網路請求,在發起網路請求是,我們需要先建立一下介面方法中定義的4個請求引數,具體程式碼如下:
// YOUR_API_KEY,YOUR_API_SECRET,YOUR_ATTRIBUTE
String apiKey = "YOUR_API_KEY";
Stirng apiSecret = "YOUR_API_SECRET";
Stirng attribute = "YOUR_ATTRIBUTE";
// 建立RequestBody,傳入引數:"multipart/form-data",String
RequestBody requestApiKey = RequestBody.create(MediaType.parse("multipart/form-data"), apiKey);
RequestBody requestApiSecret = RequestBody.create(MediaType.parse("multipart/form-data"), apiSecret);
RequestBody requestApiAttribute = RequestBody.create(MediaType.parse("multipart/form-data"), attribute);
// 建立RequestBody,傳入引數:"multipart/form-data",File
RequestBody requestImgFile = RequestBody.create(MediaType.parse("multipart/form-data"), imgFile);
// 建立MultipartBody.Part,用於封裝檔案資料
MultipartBody.Part requestImgPart =
MultipartBody.Part.createFormData("img_file", imgFile.getName(), requestImgFile);
// 發起網路請求,上傳圖片我二進位制資料
DetectService service = new DetectService();
Call<ResponseBody> call = service.detect(requestApiKey, requestApiSecret, requestImgPart, requestApiAttribute);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
// 網路請求成功,處理響應結果
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
// 網路請求失敗,錯誤處理
}
});
至此,通過Retrofit 2 @POST
註解上傳檔案二進位制資料到伺服器就完成啦,OK!
相關推薦
Retrofit 2使用要點梳理:淺析POST檔案/表單上傳
實習期的第一個任務就是為專案組預研FACE++智慧人臉識別這一新功能。呼叫曠視FACE++人臉識別介面,進行人臉識別有兩種方式:一是通過先上傳圖片到雲端儲存網站(網盤,雲盤,七牛雲等)獲得圖片檔案對應的URL引數,通過圖片的網路URL引數呼叫FACE++介面;二是在手機客戶端直接上傳檔案呼叫FACE++介
PHP:curl模擬form表單上傳檔案
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upload"> <buttion>submit</button> </f
PHP使用CURL向Python,Golang傳送檔案表單上傳檔案[HTTP協議下Api]
PHP傳送方程式碼段: <?php /** * htppCurl表單上傳檔案 * @param $file FILE_ADDR * @param string $url uri * @param string $key key * @return bool|mixed *
圖片、檔案表單上傳以及非同步上傳
這次專案用到了圖片和檔案上傳到後臺,剛開始用的form表單,但是有一點不好的,就是點選上傳後會跳轉到action頁面,使用者體驗非常不舒服,所以就改為用ajax非同步上傳,現把我的心得上傳如下: 1、form表單 <form action="http://localh
Angular 2 + 折騰記 :(7) 初步瞭解表單:模板驅動及資料驅動及脫坑要點
前言 表單在整個系統中的作用相當重要,這裡主要扯下響應表單的實現方式。 首先需要操作表單的模組引入這兩個模組; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
EXT.JS2.2表單上傳檔案
var uploadFile = new Ext.form.TextField({ fieldLabel: '上傳檔案', id:'file', name: 'uploadFile', height
curl post表單上傳檔案(C++)
最近測試如何上傳檔案到伺服器。原來傳照片一致通過binary 形式傳檔案,或者把圖片base64編碼傳圖片。一致沒有用form-data 表單形式傳送資料,今天嘗試下如何使用libcurl提供的API上傳檔案。 Sample code: #include <
Java Web 學習筆記之一:伺服器獲取表單上傳的檔案
Servlet3.0標準之後,Java Web檔案上傳就不需要通過FileUpload等庫來實現了,通過servlet API即可實現web後臺的檔案上傳支援。 表單提交請求,表單中的檔案可以通過request.getPart()方法獲取。 下面來介紹獲取檔案的具體使用方
HttpClien實現使用post方式模擬表單上傳大檔案和字元引數
前提:自行準備好httpmime.jar /** * HttpClien實現模擬表單post提交檔案資料和字元引數,並支援大檔案上傳 * @author dance * */ public class HttpClientUploadManager { pub
IE相容筆記(一):相容IE9表單上傳檔案
幾年前做相容IE8的pc端專案的時候就遇到檔案上傳的需求,當時也是檢視文件來解決IE9以下不支援formData的問題。由於之前沒有寫部落格的習慣,最近又遇到這樣的需求,所以寫出來想幫助需要用到的朋友。 本身檔案上傳不難,只需要注意一些細節: 用最初的表單提交的方式f
tp5的Request::instance()獲取post、get、引數、表單上傳的檔案
use think\Request;class Name{ $request = Request::instance(); $method = $request->method();//獲取上傳方式 $request->param();//獲取所
java模擬表單上傳檔案,java通過模擬post方式提交表單實現圖片上傳功能例項
package com.zdz.httpclient;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.
axios.post用表單方式傳給後臺
先在main.js中引入axios自帶的querystring(不用安裝) import querystring from 'querystring' Vue.prototype.$qs = querystring 和原來寫的一樣。只是吧data變下。
form表單上傳檔案
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
ajax上傳檔案 基於jquery form表單上傳檔案
<script src="/static/js/jquery.js"></script><script> $("#reg-btn").click(function () { // 1. 取到使用者填寫的資料 var for
普通檔案的上傳(表單上傳和ajax檔案非同步上傳)
一.表單上傳: html客戶端部分: <form action="upload.ashx" method="post" enctype="multipart/form-data"> 選擇檔案:<input type="file" name="file1" /><br /
django 基於form表單上傳檔案和基於ajax上傳檔案
一、基於form表單上傳檔案 1、html裡是有一個input type="file" 和 ‘submit’的標籤 2、vies.py def fileupload(request): if request.method == 'POST': print(request.P
ajax實現上傳檔案和form表單上傳檔案的區別
在使用form表單的時候,一旦點選提交觸發submit事件,一般會使得頁面跳轉,頁面間的跳轉等行為的控制權往往在後端,後端會控制頁面的跳轉及資料傳遞,但是在某些時候不希望頁面跳轉,或者說想要將控制權放在前端,通過js來操作頁面的跳轉或者資料變化。 一般這種非同步的操作,我們
form表單上傳檔案三要素
1.提供form表單,method必須是post 2.form表單的enctype必須是multipart/form-data 3.提供input type="file"類的上傳輸入域 <div> <form action="${ctx}/easyedu/sta
使用httpclient模擬表單上傳檔案,後臺用struts2接收
本人是使用java,開發android後臺的,公司要求使用SSM框架,有一個功能要求是實現android大檔案的上傳。開發人員都是新手,以前沒有開發經驗,鼓搗了好久,也嘗試了兩個android框架,Xutils貌似跟struts2不太好整合,而AsyncHttpClient