React native lambda调整大小后,将照片从react native(expo)摄像头上传至aws s3

React native lambda调整大小后,将照片从react native(expo)摄像头上传至aws s3,react-native,amazon-s3,aws-lambda,expo,aws-api-gateway,React Native,Amazon S3,Aws Lambda,Expo,Aws Api Gateway,迄今为止的进展 我已经创建了一个应用程序。 从应用程序捕获的图像具有如下对象 ` ` 我在api gateway中做了一个端点,api gateway连接到一个lambda,我正在将上述数据发送到我的后端` axios .post(uploadEndPoint, capturedImage, { headers: { 'Content-Type': 'application/json', }, }) .the

迄今为止的进展 我已经创建了一个应用程序。 从应用程序捕获的图像具有如下对象

`

`

我在api gateway中做了一个端点,api gateway连接到一个lambda,我正在将上述数据发送到我的后端`

axios
      .post(uploadEndPoint, capturedImage, {
        headers: {
          'Content-Type': 'application/json',
        },
      })
      .then((response) => {
        console.log(response);
      })
      .catch((error) => {
        console.log(error.response);
      });
` 我在lambda中获取捕获的数据

首先,我尝试在s3中保存而不进行这样的大小调整,如果这样做有效,那么我将进行大小调整

`

import Responses from '../utils/responses';
    import * as fileType from 'file-type';
    import { v4 as uuid } from 'uuid';
    import * as AWS from 'aws-sdk';
    
    const s3 = new AWS.S3();
    
    const allowedMimes = ['image/jpeg', 'image/png', 'image/jpg'];
    
    export const handler = async (event) => {
      console.log('event>>', JSON.parse(event.body));
      try {
        const body = JSON.parse(event.body);
    
        if (!body) {
          return Responses._400({ message: 'incorrect body on request' });
        }
    
        let imageData = body;
        console.log('imageData>>', imageData);
       
        const buffer = Buffer.from(imageData, 'base64');
        console.log('buffer>>', buffer);
        const fileInfo = await fileType.fromBuffer(buffer);
        console.log(fileInfo);
        const detectedExt = fileInfo.ext;
        const detectedMime = fileInfo.mime;
    
        console.log('detectedExt>>', detectedExt);
        console.log('detectedMime>>', detectedMime);
    
        if (!allowedMimes.includes(detectedMime)) {
          return Responses._400({ message: 'mime is not allowed ' });
        }
    
        const name = uuid();
        const key = `${name}.${detectedExt}`;
    
        console.log(`writing image to bucket called ${key}`);
    
        await s3
          .putObject({
            Body: buffer,
            Key: key,
            ContentType: detectedMime,
            Bucket: process.env.imageUploadBucket,
            ACL: 'public-read',
          })
          .promise();
    
        const url = `https://${process.env.imageUploadBucket}.s3-${process.env.region}.amazonaws.com/${key}`;
        return Responses._200({
          imageURL: url,
        });
      } catch (error) {
        console.log('error', error);
    
        return Responses._400({
          message: error.message || 'failed to upload image',
        });
      }
    };
`

文件信息显示未定义

我想要的东西 调整图像大小并通过该lambda上传到s3

`

import Responses from '../utils/responses';
    import * as fileType from 'file-type';
    import { v4 as uuid } from 'uuid';
    import * as AWS from 'aws-sdk';
    
    const s3 = new AWS.S3();
    
    const allowedMimes = ['image/jpeg', 'image/png', 'image/jpg'];
    
    export const handler = async (event) => {
      console.log('event>>', JSON.parse(event.body));
      try {
        const body = JSON.parse(event.body);
    
        if (!body) {
          return Responses._400({ message: 'incorrect body on request' });
        }
    
        let imageData = body;
        console.log('imageData>>', imageData);
       
        const buffer = Buffer.from(imageData, 'base64');
        console.log('buffer>>', buffer);
        const fileInfo = await fileType.fromBuffer(buffer);
        console.log(fileInfo);
        const detectedExt = fileInfo.ext;
        const detectedMime = fileInfo.mime;
    
        console.log('detectedExt>>', detectedExt);
        console.log('detectedMime>>', detectedMime);
    
        if (!allowedMimes.includes(detectedMime)) {
          return Responses._400({ message: 'mime is not allowed ' });
        }
    
        const name = uuid();
        const key = `${name}.${detectedExt}`;
    
        console.log(`writing image to bucket called ${key}`);
    
        await s3
          .putObject({
            Body: buffer,
            Key: key,
            ContentType: detectedMime,
            Bucket: process.env.imageUploadBucket,
            ACL: 'public-read',
          })
          .promise();
    
        const url = `https://${process.env.imageUploadBucket}.s3-${process.env.region}.amazonaws.com/${key}`;
        return Responses._200({
          imageURL: url,
        });
      } catch (error) {
        console.log('error', error);
    
        return Responses._400({
          message: error.message || 'failed to upload image',
        });
      }
    };