我使用精美的上传程序将文件上传到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",
},
)}
答案 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()
}