【问题标题】:Image upload/download using aws lambda使用 aws lambda 上传/下载图像
【发布时间】:2021-02-23 09:34:15
【问题描述】:

我正在尝试创建一个 lambda 函数,它接受图像作为多部分对象,然后进行一些处理并将其上传到 s3 存储桶并向用户提供一些响应。

我找到了一些如何继续的示例,但是我不明白我是否必须创建两个 lambda 函数并上传单独的 jar,或者可以以不同的方式完成。

到目前为止,我有解析多部分并上传到 s3 的服务,我的问题是如何使用 aws lambdas,谢谢大家

public String uploadFile(MultipartFile multipartFile) {
        String fileUrl = "";
        try {
            File file = convertMultiPartToFile(multipartFile);
            String fileName = generateFileName(multipartFile);
            fileUrl = endpointUrl + "/" + bucketName + "/" + fileName;
            uploadFileTos3bucket(fileName, file);
        } catch (Exception e) {
           throw new RuntimeException(e);
        }
        return fileUrl;
    }

    private File convertMultiPartToFile(MultipartFile file){
        File convFile = new File(file.getOriginalFilename());
        try {
            FileOutputStream fos = new FileOutputStream(convFile);
            fos.write(file.getBytes());
            fos.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return convFile;
    }

    private String generateFileName(MultipartFile multiPart) {
        return new Date().getTime() + "-" + multiPart.getOriginalFilename().replace(" ", "_");
    }

    private void uploadFileTos3bucket(String fileName, File file) {
        s3client.putObject(new PutObjectRequest(bucketName, fileName, file)
                .withCannedAcl(CannedAccessControlList.PublicRead));
    }

【问题讨论】:

    标签: java amazon-web-services amazon-s3 aws-lambda


    【解决方案1】:

    我建议你可以简单地使用一个 lambda 函数,它应该与一个 api 网关端点集成。因此,用户可以使用需要上传到 S3 的文件调用端点(post),然后从 lambda 函数中完成剩下的工作(处理 + 上传到 s3),然后将一些响应返回给用户。

    This 可以作为一个起点。

    获取上传文件的 s3 URL:

    s3Client.getUrl("your_bucket_name", "your_file_key").toExternalForm();
    

    Here 是另一个使用 Lambda 在 S3 中调整图像大小的示例。虽然它是 JS 代码,并且只使用一个 Lambda 函数。

    【讨论】:

    • 谢谢,假设我还想有一个额外的方法来获取所有上传图像的链接并将它们发送回 ui,在这种情况下我需要两个 lambdas 还是仍然可以继续一个一个
    • 你可以在同一个 lambda 本身内完成; putObject 调用成功后,您可以通过放置上面我发布的代码行来声明 url,然后简单地将其作为响应返回。
    • 好的,谢谢,现在我需要弄清楚如何获取链接列表,但是我想做的只是上传文件并有一个获取上传图像的所有链接的方法。
    • 没问题,任何时候。是的,在这种情况下,您可能必须将这些 s3 url 放入 HashMap 甚至列表中,然后在上传每个文件后将其作为一个整体返回到响应中。
    • 是的,它是一个选项,但能够以某种方式触发它会更好,否则我会在不需要的情况下继续返回它,所以我想按需返回整个列表
    猜你喜欢
    • 2018-05-27
    • 2020-03-23
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多