android?studio實現(xiàn)上傳圖片到java服務器
本文實例為大家分享了android studio上傳圖片到java服務器的具體代碼,供大家參考,具體內容如下
1.build.gradle配置(增加)
dependencies{ ?? ??implementation 'com.squareup.okhttp3:okhttp:4.9.0' ? ? ?implementation 'org.conscrypt:conscrypt-android:2.5.1' ?? ??? ?}
2.AndroidManifest.xml配置權限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在application里面添加android:usesCleartextTraffic="true"
3.安卓前端部分
3.1xml樣式界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ? xmlns:app="http://schemas.android.com/apk/res-auto" ? ? xmlns:tools="http://schemas.android.com/tools" ? ? android:layout_width="match_parent" ? ? android:layout_height="match_parent" ? ? android:orientation="vertical" ? ? > ? ? <Button ? ? ? ? android:id="@+id/btn" ? ? ? ? android:layout_width="150dp" ? ? ? ? android:layout_height="100dp" ? ? ? ? android:text="上傳"/> </LinearLayout>
3.2安卓后臺代碼MainActivity
package com.example.upload; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.io.IOException; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class MainActivity extends AppCompatActivity { ? ? private Button btn; ? ? @Override ? ? protected void onCreate(Bundle savedInstanceState) { ? ? ? ? super.onCreate(savedInstanceState); ? ? ? ? setContentView(R.layout.activity_main); ? ? ? ? btn = findViewById(R.id.btn); ? ? ? ? btn.setOnClickListener(new View.OnClickListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onClick(View view) { ? ? ? ? ? ? ? ? String result = "{\"data\": \"0\"}"; ? ? ? ? ? ? ? ? new Thread(new Runnable(){ ? ? ? ? ? ? ? ? ? ? @Override ? ? ? ? ? ? ? ? ? ? public void run() { ? ? ? ? ? ? ? ? ? ? ? ? String img = Environment.getExternalStorageDirectory()+"/1/123456789.png"; ? ? ? ? ? ? ? ? ? ? ? ? String url = "http://192.168.0.103:8019/uploadAudio"; ? ? ? ? ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ? ? ? ? uploadImage(url,img); ? ? ? ? ? ? ? ? ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? Looper.prepare(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? Looper.loop(); ? ? ? ? ? ? ? ? ? ? ? ? } catch (JSONException e) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? //創(chuàng)建信息對象 ? ? ? ? ? ? ? ? ? ? ? ? Message message = Message.obtain(); ? ? ? ? ? ? ? ? ? ? ? ? Bundle bundle = new Bundle(); ? ? ? ? ? ? ? ? ? ? ? ? bundle.putString("data",result); ? ? ? ? ? ? ? ? ? ? ? ? message.setData(bundle);//向主線程發(fā)信息 ? ? ? ? ? ? ? ? ? ? ? ? addTrackHandler.sendMessage(message); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }).start(); ? ? ? ? ? ? } ? ? ? ? }); ? ? } ? ? /** ? ? ?* 上傳圖片 ? ? ?* @param url ? ? ?* @param imagePath 圖片路徑 ? ? ?* @return 新圖片的路徑 ? ? ?* @throws IOException ? ? ?* @throws JSONException ? ? ?*/ ? ? public static String uploadImage(String url, String imagePath) throws IOException, JSONException { ? ? ? ? OkHttpClient okHttpClient = new OkHttpClient(); ? ? ? ? File file = new File(imagePath); ? ? ? ? RequestBody image = RequestBody.create(MediaType.parse("image/png"), file); ? ? ? ? RequestBody requestBody = new MultipartBody.Builder() ? ? ? ? ? ? ? ? .setType(MultipartBody.FORM) ? ? ? ? ? ? ? ? .addFormDataPart("file", imagePath, image) ? ? ? ? ? ? ? ? .build(); ? ? ? ? Request request = new Request.Builder() ? ? ? ? ? ? ? ? .url(url) ? ? ? ? ? ? ? ? .post(requestBody) ? ? ? ? ? ? ? ? .build(); ? ? ? ? Response response = okHttpClient.newCall(request).execute(); ? ? ? ? JSONObject jsonObject = new JSONObject(response.body().string()); ? ? ? ? return jsonObject.optString("image"); ? ? } ? ? Handler addTrackHandler = new Handler(new Handler.Callback() { ? ? ? ? @Override ? ? ? ? public boolean handleMessage(Message message) { ? ? ? ? ? ? String result = ""; ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? result = message.getData().getString("data"); ? ? ? ? ? ? ? ? Toast.makeText(MainActivity.this, "新增成功", Toast.LENGTH_SHORT).show(); ? ? ? ? ? ? }catch (Exception e){ ? ? ? ? ? ? } ? ? ? ? ? ? //Toast.makeText(MainActivity.this, "調用成功"+result, Toast.LENGTH_SHORT).show();//測試彈框 ? ? ? ? ? ? return true; ? ? ? ? } ? ? }); }
4.spring boot后臺接受圖片并寫入本地路徑
@RequestMapping("/uploadAudio") ? ? @ResponseBody ? ? public void uploadAudio(@RequestParam MultipartFile file) { ? System.out.println(file.getOriginalFilename()); ? ? ? ? if (!file.isEmpty()) { ? ? ? ? ? ? String filename = file.getOriginalFilename(); ? ? ? ? ? ? System.out.println("Load fn:" + filename); ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? String fileurl = "d:/Download/testt.png"; ? ? ? ? ? ? ? ? File f = new File(fileurl); ? ? ? ? ? ? ? ? BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f)); ? ? ? ? ? ? ? ? if (!f.exists()) { ? ? ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ? ? f.createNewFile(); ? ? ? ? ? ? ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? out.write(file.getBytes()); ? ? ? ? ? ? ? ? out.flush(); ? ? ? ? ? ? ? ? out.close(); ? ? ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? } ? ? ? ? }else { ? ? ? ? ? ? System.out.println("上傳失敗,因為文件是空的."); ? ? ? ? } ? ? }
注:如果上傳圖片提示沒有權限,則長按apk圖標,打開讀取本地文件的權限即可
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
如何為RecyclerView添加Header和Footer
這篇文章主要為大家詳細介紹了如何為RecyclerView添加Header和Footer,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Android IPC機制ACtivity綁定Service通信代碼實例
這篇文章主要介紹了Android IPC機制ACtivity綁定Service通信代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09Android實現(xiàn)文件上傳和下載倒計時功能的圓形進度條
這篇文章主要介紹了Android實現(xiàn)文件上傳和下載倒計時功能的圓形進度條,需要的朋友可以參考下2017-09-09Android編程實現(xiàn)下載圖片及在手機中展示的方法
這篇文章主要介紹了Android編程實現(xiàn)下載圖片及在手機中展示的方法,涉及Android針對圖形文件的遠程下載及遍歷顯示相關操作技巧,需要的朋友可以參考下2017-02-02Android 開發(fā)系統(tǒng)自帶語音模塊應用
本篇文章 主要介紹 Android 開發(fā)自帶語音模塊實例,在開發(fā)Android系統(tǒng)中會用到系統(tǒng)語音搜索模塊,這里給大家一個參考實例2016-07-07Android 8.0系統(tǒng)中應用圖標的適配微技巧
這篇文章主要介紹了Android 8.0系統(tǒng)中應用圖標的適配微技巧 ,需要的朋友可以參考下2018-04-04