在精细的上传器中,如何根据环境设置不同的 S3 存储桶

In fine uploader, how to have S3 bucket different per environment

我正在使用 fine uploader 将文件上传到 S3。

根据我的经验,fine uploader 强制在 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",     
    },
)}

Based on my experience, fine uploader forces to hard code s3 bucket name in the java script itself or it may be my misundestanding!

是的,这绝对是误会

通常,您会通过 request.endpoint option. You can specify a default value here and then override it at almost any time, for all subsequent files or one or more specific files, via the setEndpoint API method 将存储桶指定为 URL。例如,您可以从 onSubmit 回调处理程序调用此方法,甚至可以通过 return 在回调处理程序中调用 Promise 并解析 Promise 一旦你打电话给 setEndpoint.

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

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

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