android - 尝试将图像从 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 发送图像,它工作正常,我可以打开图像。有没有人有相同/相似的问题?
解决方案
推荐阅读
- javascript - 将数组传递给函数 - PG 和 NodeJS
- angular - 来自 web api 2 的响应类型以及如何在 Angular 6 中处理它们
- datetime - 在 golang 中解析日期
- python - 一种在 Python 中向 contextvars 添加类型的方法
- matlab - BFGS 准牛顿算法不计算步长
- typo3 - TYPO3 异常 #1294587217:从 6.2.6 升级到 7.6.20 时
- javascript - 打开新标签或窗口,而不是弹出角度 2
- angular - 角度库安装对等依赖问题
- python - 如何找到一个独特的 HTML 元素?
- java - 任务':app:kaptDemoProductionDebugKotlin'的错误执行失败。?