首页 > 解决方案 > 尝试将图像从 Android 上传到 AWS Lambda

问题描述

我在 Kotlin/Android 中使用此代码将图像上传到服务器:

fun uploadImageWithLambda(){
        val file = File(filePath)
        val retrofit = NetworkClient.getRetrofitObj()
        val uploadApis = retrofit.create(UploadApis::class.java)
        val requestBody = RequestBody.create(MediaType.parse("image/*"), file)
        val part = MultipartBody.Part.createFormData("image", file.name, requestBody)

        val call = uploadApis.uploadImage(imageRequest = part)
        call.enqueue(object : Callback<ImageResponse> {
            override fun onFailure(call: Call<ImageResponse>, t: Throwable) {
                Log.e(TAG, t.toString())
            }

            override fun onResponse(call: Call<ImageResponse>, response: Response<ImageResponse>) {
                Log.i(TAG, "success")
            }
        })

    }

这是 UploadApis 中的函数

@Multipart
@POST("prod/res")
fun uploadImage(@Part imageRequest: MultipartBody.Part) : Call<ImageResponse>

我在 Lambda 中收到的文件无法打开。当我从该文件中删除一些字节时,我得到了正确的图像文件。

我的 lambda 函数中的第一行代码:

const multipart = require('aws-multipart-parser')

exports.handler = async (event) => {
    try {

        CONSTANTS.logger.info("POST image in S3...")
        let spotText = {}
        const result = multipart.parse(event, spotText)
        fs.writeFileSync('original.jpg', result.image.content)
        const content = result.image.content;
        console.log(result)

        var newBuffer = new Buffer(content.length - 22);
        content.copy(newBuffer, 0, 22, content.length);

        // const sliced = content.slice(25);
        console.log(newBuffer);
        fs.writeFileSync('new.jpg', content);
....

我还制作了一个小型快递应用程序,通过一条路线将图像上传到 S3,并以同样的方式从 Android 发送图像,它工作正常,我可以打开图像。有没有人有相同/相似的问题?

标签: androidnode.jsamazon-web-servicesaws-lambdaretrofit

解决方案


推荐阅读