多图片上传

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 return@setOnClickListener
} }
vectorThread() 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 { binding.btnTakePhoto.clickWithDebounce {
takePhoto() takePhoto()
@@ -248,6 +256,7 @@ class FoodCollectionActivity : ComponentActivity() {
collectList[index].let { collectList[index].let {
it.bitmap = cropBitmap it.bitmap = cropBitmap
it.imageFile = file
it.isShowCamera = false it.isShowCamera = false
} }
collectionAdapter.notifyItemChanged(index) collectionAdapter.notifyItemChanged(index)
@@ -16,7 +16,7 @@ import com.sw.inbound.utils.ext.hideKeyboard
abstract class BaseDialog( abstract class BaseDialog(
context: Context, context: Context,
var defWidth: Int = 1500.dp, var defWidth: Int = 1500.dp,
var defHeight: Int = 900.dp var defHeight: Int = 800.dp
) : Dialog(context, R.style.DialogTheme) { ) : Dialog(context, R.style.DialogTheme) {
override fun onCreate(savedInstanceState: Bundle?) { 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.SupplierInfo
import com.sw.inbound.model.response.User import com.sw.inbound.model.response.User
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Header import retrofit2.http.Header
import retrofit2.http.Multipart import retrofit2.http.Multipart
import retrofit2.http.POST import retrofit2.http.POST
import retrofit2.http.Part import retrofit2.http.Part
import retrofit2.http.PartMap
import retrofit2.http.Query import retrofit2.http.Query
import retrofit2.http.Url import retrofit2.http.Url
@@ -154,6 +156,14 @@ interface ApiService {
@Part file: MultipartBody.Part, @Part file: MultipartBody.Part,
): ApiResponse<String> ): 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.graphics.Bitmap
import android.net.Uri import android.net.Uri
import java.io.File
data class FoodClassInfo( data class FoodClassInfo(
var class_names: List<String>, var class_names: List<String>,
@@ -12,6 +13,7 @@ data class FoodClassInfo(
data class FoodCollectionBean( data class FoodCollectionBean(
var imageUri: Uri? = null, var imageUri: Uri? = null,
var bitmap: Bitmap? = null, var bitmap: Bitmap? = null,
var imageFile: File? = null,
var imageVector: FloatArray? = null, var imageVector: FloatArray? = null,
var isShowCamera: Boolean = false, var isShowCamera: Boolean = false,
var isFinish: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.network.api.ApiService
import com.sw.inbound.utils.ContextUtils import com.sw.inbound.utils.ContextUtils
import com.sw.inbound.utils.FileUtils 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 timber.log.Timber
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
@@ -206,4 +212,27 @@ class RemoteRepository @Inject constructor(
apiService.selfPurchaseWarehousing(list = list) 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) 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)
}
}
} }