【问题标题】:FineUploader with S3 how to specify object name on S3FineUploader 与 S3 如何在 S3 上指定对象名称
【发布时间】:2013-10-16 05:00:59
【问题描述】:

在哪里可以指定 FineUploader 在上传到 Amazon S3 时创建的服务器名称的格式或模式?我需要更好地控制如何在 S3 上创建文件名和路径。谢谢。

【问题讨论】:

    标签: amazon-s3 fine-uploader


    【解决方案1】:

    使用objectProperties.key 选项。

    您可以提供String 值或将预期键作为String 返回的函数。

    以下示例演示了设置密钥和执行阻止操作 ($.post)。它使用jQuery插件,

    // <snip>
    objectProperties: {
            key: function(fileId) {
                var keyRetrieval = new qq.Promise(),
                    filename = $("#fineUploader").fineUploader("getName", fileId);
    
                $.post("createKey.html", {name: filename})
                    .done(function(data) { keyRetrieval.success(data.key); })
                    .fail(function() { keyRetrieval.failure(); });
    
                return keyRetrieval;
            }
        },
    // </snip>
    

    一个更简单的例子,

    objectProperties: {
            key: function(fileId) {
                var filename = $("#fineUploader").fineUploader("getName", fileId);
                return fileId + "/" + filename;
            }
        },
    

    请记住,如果您想防止用户覆盖彼此的文件,您应该使这些键唯一!将每个上传文件放在一个带有随机密钥的文件夹中可以防止这种情况发生。

    【讨论】:

    • 上面的例子是从客户端脚本更改密钥对吗?我会担心有人能够破解它并将他们想要的任何密钥发送到签名代码。有没有办法让服务器上的PHP指定key,让剩下的操作使用服务器指定的key?
    • 不,没有办法做到这一点。如果您担心这类事情,您可以轻松检查策略文档中的密钥名称或签名服务器上的请求标头,如果看起来有问题,则拒绝它们。
    • 那么我至少可以从上面显示的代码中向服务器执行 AJAX 请求吗?返回服务器指定的key,然后在提交回来的时候,检查确认它是服务器指定的key。至少以这种方式,除了包含文件名的后缀之外,没有任何机制可以让客户端机器选择对象名。像这样的东西会起作用吗,还是有我没有看到的问题?
    • 是的,您当然可以这样做。如果您确实在密钥确定函数中执行了异步操作,则您的函数必须遵守“承诺契约”。也就是说,它必须返回一个qq.Promise 实例,这是Fine Uploader 对该模式的实现。当来自服务器的带有键名的响应进来时,您必须在返回的qq.Promise 实例上调用success 方法,并传入键名。返回一个承诺信号给 Fine Uploader,即使函数立即返回,仍然需要完成工作。见goo.gl/ufhqIp
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2015-05-20
    相关资源
    最近更新 更多