1. 程式人生 > >使用Okhttp上傳圖片

使用Okhttp上傳圖片

寫專案的時候接觸了上傳圖片這個模組。第一次使用OKhttputils上傳圖片時發現有時候上傳成功,有時候失敗報500錯誤,我糾結了一天,用postman測試介面是沒有問題的,最後換回原生的okhttp框架去寫。後來發現可能是之前的OKhttputils版本太低了導致的(2.6.2),現在用的Okhttp版本是(3.2.0

private static final String TAG = "MainActivity";
private Button btn_up;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super
.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_up = (Button) findViewById(R.id.btn_up); btn_up.setOnClickListener(this); } private void upImage() { OkHttpClient mOkHttpClent = new OkHttpClient(); File file = new File(Environment.getExternalStorageDirectory()+"/HeadPortrait.jpg"
); MultipartBody.Builder builder = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("img", "HeadPortrait.jpg", RequestBody.create(MediaType.parse("image/png"), file)); RequestBody requestBody = builder.build(); Request request = new Request.Builder() .url(url
) .post(requestBody) .build(); Call call = mOkHttpClent.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e(TAG, "onFailure: "+e ); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "失敗", Toast.LENGTH_SHORT).show(); } }); } @Override public void onResponse(Call call, Response response) throws IOException { Log.e(TAG, "成功"+response); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show(); } }); } }); } @Override public void onClick(View v) { Log.e(TAG, "onClick: " ); new Thread(new Runnable() { @Override public void run() { upImage(); } }).start(); }