Trước hết bạn cần xây dựng API, hãy xem bài viết https://zezo.dev/view/huong-dan-tao-route-upload-file-voi-multer-trong-nodejs/
Sau khi có API rồi thì bạn tiến hành xây dựng code Android Java để thực hiện upload ảnh.
Bước 1: Tạo project mới và nhúng thư viện
Bạn tự tạo 1 project mới và nhúng các thư viện sau vào file build.gradle ở cấp độ module
implementation ("com.squareup.retrofit2:retrofit:2.11.0")
implementation ("com.squareup.retrofit2:converter-gson:2.11.0")
implementation ("com.squareup.okhttp3:okhttp:4.12.0")
implementation ("androidx.media:media:1.4.0")
implementation ("com.squareup.picasso:picasso:2.8")
Sau khi nhúng thư viện nhớ bấm Sync để cập nhật thư viện
Bước 2: Tạo file interface ApiService để retrofit làm việc
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
public interface ApiService {
@Multipart
@POST("demo-upload")
Call<KetQuaUpload> uploadFile(@Part MultipartBody.Part file);
}
Bước 3: Tạo layout cho activity
Trên Layout có các nút bấm
<?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"
tools:context=".MainActivity"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Demo Upload file"
/>
<ImageView
android:id="@+id/img_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_browsefile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Browse File"/>
<Button
android:id="@+id/btn_upload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Upload File"/>
</LinearLayout>
Bước 4: Khai báo Manifest
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
Đặc biệt chú ý trong thẻ application của Mainifest phải có 2 thuộc tính sau
<application
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
Bước 5: Tạo một lớp là KetQuaUpload để convert kết quả trả về từ server sang đối tượng java cho dễ dùng
public class KetQuaUpload {
public String link_anh;
public String error;
public String toString(){
return "Error: "+ error + "\nLink: " + link_anh;
}
}
Tiếp theo viết code cho MainActivity bạn xem ở bài viết tiếp theo https://zezo.dev/view/huong-dan-su-dung-retrofit-upload-file-anh-len-api-phan-mainactivity