OKhttp post上傳檔案
* java.io.FileNotFoundException: /storage/emulated/0/note01.md: open failed: EACCES (Permission denied)
* 檔案未找到的異常....開啟失敗了....許可權拒絕
*
* 6.0以後許可權是執行時許可權...
* ------------1.把targetSdk版本改到23以下
* ------------2.http://www.jianshu.com/p/a51593817825 使用執行時許可權
*
* 圖片:改變檔案的型別,,,,在換掉一個支援圖片上傳的地址
*
* 多張圖片.....迴圈上傳
*
* @param view
*/
//點選按鈕
public void postShangChuan(View view) {
//A.檢查使用者是否已經允許了許可權....PackageManager.PERMISSION_GRANTED代表的是使用者已經允許
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//B.不允許...的時候,,,請求使用者允許這個許可權
// Activity arg0代表當前的activity, @NonNull String[] arg1請求的許可權的陣列,也就是需要請求允許哪些許可權, int arg2請求碼
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1001);
}else {
//允許...上傳檔案
postFile();
}
//允許...上傳檔案
private void postFile() {
//1.
OkHttpClient okHttpClient = new OkHttpClient();
//2.指定檔案的型別 image/jpg image/png video/mp4 ...mimeType
MediaType mediaType = MediaType.parse("text/x-markdown;charset=utf-8");
//3.指定要上傳的檔案物件
File file = new File(Environment.getExternalStorageDirectory(),"note01.md");
Request request = new Request.Builder()
//上傳檔案的時候請求體使用RequestBody.create()獲取okhttp3.MediaType contentType 檔案的型別,@NotNull java.io.File file上傳的檔案物件
.post(RequestBody.create(mediaType, file))
.url("https://api.github.com/markdown/raw")
.build();
//4.
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if (response.isSuccessful()){
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Toast.makeText(MainActivity.this,response.body().string(),Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
/**
* C.請求許可權的結果....可以獲取到使用者是否允許了許可權
*/
@TargetApi(23)
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1001) {
//grantResults使用者允許許可權的返回值....數組裡面放的是使用者是否允許許可權
//PackageManager.PERMISSION_GRANTED允許許可權
if (grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED) {
//上傳
postFile();
}else {
Toast.makeText(MainActivity.this, "拒絕", Toast.LENGTH_SHORT).show();
}
}
}