mirror of
https://github.com/pawelorzech/Swoosh.git
synced 2026-03-31 11:55:47 +00:00
feat: add file upload API endpoint, model, and repository method
- Create FileModels.kt with FileUploadResponse and UploadedFile data classes - Add uploadFile() multipart endpoint to GhostApiService - Add uploadFile(uri) method to PostRepository following the same pattern as uploadImage()
This commit is contained in:
parent
807c6d559e
commit
2f9b7dac09
3 changed files with 40 additions and 0 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package com.swoosh.microblog.data.api
|
||||
|
||||
import com.swoosh.microblog.data.model.FileUploadResponse
|
||||
import com.swoosh.microblog.data.model.GhostSite
|
||||
import com.swoosh.microblog.data.model.MembersResponse
|
||||
import com.swoosh.microblog.data.model.PageWrapper
|
||||
|
|
@ -114,6 +115,13 @@ interface GhostApiService {
|
|||
@Part file: MultipartBody.Part,
|
||||
@Part("purpose") purpose: RequestBody
|
||||
): Response<ImageUploadResponse>
|
||||
|
||||
@Multipart
|
||||
@POST("ghost/api/admin/files/upload/")
|
||||
suspend fun uploadFile(
|
||||
@Part file: MultipartBody.Part,
|
||||
@Part("ref") ref: RequestBody? = null
|
||||
): Response<FileUploadResponse>
|
||||
}
|
||||
|
||||
data class ImageUploadResponse(
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
package com.swoosh.microblog.data.model
|
||||
|
||||
data class FileUploadResponse(
|
||||
val files: List<UploadedFile>
|
||||
)
|
||||
|
||||
data class UploadedFile(
|
||||
val url: String,
|
||||
val ref: String?
|
||||
)
|
||||
|
|
@ -133,6 +133,28 @@ class PostRepository(private val context: Context) {
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun uploadFile(uri: Uri): Result<String> =
|
||||
withContext(Dispatchers.IO) {
|
||||
try {
|
||||
val file = copyUriToTempFile(uri)
|
||||
val mimeType = context.contentResolver.getType(uri) ?: "application/octet-stream"
|
||||
val requestBody = file.asRequestBody(mimeType.toMediaType())
|
||||
val part = MultipartBody.Part.createFormData("file", file.name, requestBody)
|
||||
|
||||
val response = getApi().uploadFile(part)
|
||||
file.delete()
|
||||
|
||||
if (response.isSuccessful) {
|
||||
val url = response.body()!!.files.first().url
|
||||
Result.success(url)
|
||||
} else {
|
||||
Result.failure(Exception("File upload failed ${response.code()}"))
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Result.failure(e)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads multiple images and returns all uploaded URLs.
|
||||
* If any upload fails, returns failure with the error.
|
||||
|
|
|
|||
Loading…
Reference in a new issue