如何使用CloudFront从AWS S3获取具有别名的对象URL

AshokGK

我正在将具有唯一ID(例如“ d9127dfd01182afe7d34a37”)的文件作为对象名称上传到亚马逊s3,并将文件信息与本地数据库一起存储,包括文件的原始名称。我正在使用CloudFront网址下载文件。

如果我使用CloudFront URL下载文件,则文件名为d9127dfd01182afe7d34a37。但是我需要再次将文件名更改为数据库中的原始名称。我不想下载它。我想将具有原始名称的url提供给客户端(WebUI),客户端可以通过url下载它。

服务器端代码

 document_url = initialize_cloud_service(document.provider['primary']).get_object_url(document_id, expires_at, 'CloudFront' )

if document_url
            item = {}
            item['id'] = document['_id'].to_s
            item['name'] = document['name']
            item['mime_type'] = document['mime_type']
            item['url'] = document_url
     return {success: true, message: MESSAGES['get_url_succuss'],data: item}.to_json
end

客户端代码

download: function(response){
        file = response.data
        link = document.createElement('a');
        link.download = file.name;
        link.href = file.url;
        link.click();
    },

有什么办法可以做到这一点?请帮帮我。我正在使用ruby on rails和mongodb作为本地数据库。谢谢

AshokGK

我通过以下更改实现了

服务器端代码

             begin
                expires_at = Time.now.to_i + 30.seconds.to_i

                options = nil
                selected_provider = provider || document.provider['primary']

                case selected_provider
                when "s3"
                    options = {"response-content-disposition" => "attachment; filename=#{document['name']}"}
                    downloadable_url = initialize_cloud_service(selected_provider).get_downloadable_url(document_id, expires_at, options)

                when "google_cloud"
                    downloadable_url = initialize_cloud_service(selected_provider).get_downloadable_url(document_id, expires_at, options)
                    downloadable_url += "&response-content-disposition=attachment%3B%20filename%3D#{document['name']}"
                end

                item = {}
                item['id'] = document['_id'].to_s
                item['name'] = document['name']
                item['mime_type'] = document['mime_type']
                item['url'] = downloadable_url
                return {success: true, message: MESSAGES['get_url_succuss'],data: item}.to_json
            rescue Exception => e
                puts 'Exception in download, message: ' + e.message
                return {success: false, message: MESSAGES['default']}.to_json
            end

客户端代码

        download: function(response){
        var hiddenIFrameID = 'hiddenDownloader',
        iframe = document.getElementById(hiddenIFrameID);
        if (iframe === null) {
        iframe = document.createElement('iframe');
        iframe.id = hiddenIFrameID;
        iframe.style.display = 'none';
        document.body.appendChild(iframe);
        }
        iframe.src = response.data.url;
    },

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用AWS S3 vs Cloudfront

如何使用pyhton 3.8获取AWS S3对象的位置/ URL?

如何使用Rails从AWS S3获取对象URL(link)(API JSON Response)

在Cloudfront和S3上使用Rails AWS资产

S3如何查找对象是否具有预签名URL?

如何在不使用 cloudfront 的情况下在 aws s3 中启用基本身份验证?

您如何使用SDK创建指向S3(静态托管)网站终端节点的AWS Cloudfront分布?

如何返回在类中具有别名的类型的值?

使用boto3连接到CloudFront时如何选择AWS配置文件

如何在AWS服务中获取源代码控制配置,例如“ s3”,“ cloudfront”配置?

Cloudfront如何分配AWS KMS密钥以获取静态加密的S3映像?

如何设置DNS,AWS S3,AWS Cloudfront和AWS Certificate Manager以保护多个站点

当我的powershell cmdlet参数接受ValueFromPipelineByPropertyName并且具有别名时,如何获取原始属性名称?

使用aws cli将S3对象URL上传到存储桶后,如何获取?

如何使用 CloudFront 从 S3 提供静态文件

如何删除aws s3存储桶中具有相同键的多个对象

如何使用aws-sdk在AWS S3上获取文件的URL?

单独使用AWS S3或S3和Cloudfront进行视频下载

使用具有范围的GetObjectRequest读取AWS S3 GZIP对象

具有多个S3来源的AWS CloudFront

有没有一种方法可以使用AWS CLI获取S3对象的位置(公共URL)?

如何在使用Cloudfront上传的S3存储桶中获取文件?

基于S3存储桶的AWS Cloudfront分发,带有跨帐户对象的访问被拒绝

AWS S3:如何获取对象版本的LastModified?

如何测试AWS S3获取对象方法?

如何使用.NET为CloudFront公开的Amazon S3生成签名URL

Python 3 Boto 3,AWS S3:获取对象URL

AWS :: S3写入对象,该对象具有带斜杠字符的键

如何使用aws cli获取最新版本的s3对象?