多图片上传

This commit is contained in:
2025-11-21 13:20:12 +08:00
parent 7b171b0c19
commit 88e841f212
6 changed files with 64 additions and 2 deletions
@@ -135,6 +135,14 @@ class FoodCollectionActivity : ComponentActivity() {
return@setOnClickListener
}
vectorThread()
val goods = searchGoodsList[clickIndex]
val files = collectList.filter { it.imageFile!=null }.map { it.imageFile!! }
if (files.isEmpty()) {
return@setOnClickListener
}
viewModel.uploadMultipleImages(goods.id!!, goods.goodsName!!, files) {
}
}
binding.btnTakePhoto.clickWithDebounce {
takePhoto()
@@ -248,6 +256,7 @@ class FoodCollectionActivity : ComponentActivity() {
collectList[index].let {
it.bitmap = cropBitmap
it.imageFile = file
it.isShowCamera = false
}
collectionAdapter.notifyItemChanged(index)
@@ -16,7 +16,7 @@ import com.sw.inbound.utils.ext.hideKeyboard
abstract class BaseDialog(
context: Context,
var defWidth: Int = 1500.dp,
var defHeight: Int = 900.dp
var defHeight: Int = 800.dp
) : Dialog(context, R.style.DialogTheme) {
override fun onCreate(savedInstanceState: Bundle?) {
@@ -17,12 +17,14 @@ import com.sw.inbound.model.response.StorageType
import com.sw.inbound.model.response.SupplierInfo
import com.sw.inbound.model.response.User
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.PartMap
import retrofit2.http.Query
import retrofit2.http.Url
@@ -154,6 +156,14 @@ interface ApiService {
@Part file: MultipartBody.Part,
): ApiResponse<String>
@Multipart
@POST
suspend fun uploadMultipleImages(
@Url url: String = "${GlobalData.appBaseUrl}/neglect/inboundWeighingScale/add",
@PartMap params: Map<String, RequestBody>,
@Part parts: List<MultipartBody.Part>
): ApiResponse<String>
/**
* 搜索物品列表
*/
@@ -2,6 +2,7 @@ package com.sw.inbound.objbox
import android.graphics.Bitmap
import android.net.Uri
import java.io.File
data class FoodClassInfo(
var class_names: List<String>,
@@ -12,6 +13,7 @@ data class FoodClassInfo(
data class FoodCollectionBean(
var imageUri: Uri? = null,
var bitmap: Bitmap? = null,
var imageFile: File? = null,
var imageVector: FloatArray? = null,
var isShowCamera: Boolean = false,
var isFinish:Boolean = false
@@ -19,6 +19,12 @@ import com.sw.inbound.model.response.User
import com.sw.inbound.network.api.ApiService
import com.sw.inbound.utils.ContextUtils
import com.sw.inbound.utils.FileUtils
import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import timber.log.Timber
import java.io.File
import javax.inject.Inject
@@ -206,4 +212,27 @@ class RemoteRepository @Inject constructor(
apiService.selfPurchaseWarehousing(list = list)
}
}
suspend fun uploadMultipleImages(fileList: List<File>, param: Map<String, String>): ApiResponse<String> {
val paramsMap = mutableMapOf<String, RequestBody>()
param.forEach { (key, value) ->
paramsMap[key] = value.toRequestBody("text/plain".toMediaTypeOrNull())
}
// 准备文件参数
val fileParts = mutableListOf<MultipartBody.Part>()
fileList.forEachIndexed { index, file ->
val requestFile = file
.asRequestBody("multipart/form-data".toMediaTypeOrNull())
val filePart = MultipartBody.Part.createFormData(
"goodsPics",
file.name,
requestFile
)
fileParts.add(filePart)
}
return safeApiCall {
apiService.uploadMultipleImages(params = paramsMap, parts = fileParts)
}
}
}
@@ -377,6 +377,18 @@ class ReceiptViewModel @Inject constructor(
callback(true)
}
}
fun uploadMultipleImages(goodsId:String, goodsName:String, files:List<File>, callback: (String?) -> Unit) {
launchWithLoading {
val map = mutableMapOf<String, String>()
map["goodsId"] = goodsId
map["goodsName"] = goodsName
val resp = repository.uploadMultipleImages(fileList = files, param = map)
if (!parseResponse(resp)) {
callback(null)
return@launchWithLoading
}
callback(resp.data)
}
}
}