在精细上传器中,如何使每个环境的S3存储桶不同

时间:2016-06-21 03:39:28

标签: amazon-s3 fine-uploader

我使用精美的上传程序将文件上传到S3。

根据我的经验,精细上传程序强制在java脚本本身硬编码s3存储桶名称,否则可能是我的不当之处!我的挑战是每个环境都有不同的桶。这是否意味着我必须在每个环境中使用单独的java脚本(如下所示),例如本地,开发,测试等?有没有可以从服务器端配置传递存储桶名称的选项?

本地

$('#fine-uploader').fineUploaderS3({
    template: 'qq-template',
    autoUpload: false,
    debug: true,
    request: {
        endpoint: "http://s3.amazonaws.com/bucket_local",
        accessKey: "AKxxxxxxxxxxBIA",     
    },
)}

开发

 $('#fine-uploader').fineUploaderS3({
            template: 'qq-template',
            autoUpload: false,
            debug: true,
            request: {
                endpoint: "http://s3.amazonaws.com/bucket_dev",
                accessKey: "AKxxxxxxxxxxBIA",     
            },
        )}

测试

$('#fine-uploader').fineUploaderS3({
    template: 'qq-template',
    autoUpload: false,
    debug: true,
    request: {
        endpoint: "http://s3.amazonaws.com/bucket_test",
        accessKey: "AKxxxxxxxxxxBIA",     
    },
)}

2 个答案:

答案 0 :(得分:1)

  

根据我的经验,精细的上传程序强制在java脚本中硬编码s3存储桶名称,否则可能是我的误解!

是的,这绝对是一种误解。

通常,您可以通过request.endpoint option将广告管理系统指定为网址。您可以在此处指定默认值,然后几乎随时通过setEndpoint API method覆盖所有后续文件或一个或多个特定文件。您可以从例如onSubmit回调处理程序调用此方法,甚至可以通过在回调处理程序中返回Promise并在您的Promise解析后委派给您的服务器已拨打setEndpoint

Fine Uploader尝试从request.endpoint URL确定存储桶名称。如果无法做到这一点(例如,如果您使用CDN作为端点),则需要通过objectProperties.bucket option提供存储桶名称。这也可以动态更新,因为选项值可能是一个函数,如果您想委托异步任务来确定存储桶名称,您甚至可以从此函数返回Promise(例如,如果您需要使用ajax调用从服务器端点获取存储桶名称。 Fine Uploader S3会在尝试上传每个文件之前调用bucket函数,并将文件的ID传递给您的函数。

答案 1 :(得分:0)

我将s3_url设置为html中的隐藏值,并根据环境配置在服务器上设置值。

request: {
   endpoint: $('#s3_url').val() 
}