微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Hlow实现dropzone.js将文件上传到亚马逊s3服务器?

请帮助实现dropzone.js将文件上传到Amazon s3服务器.已经提到以下链接 https://github.com/enyo/dropzone/issues/33,但是,不知道要实现.请帮助实现同样的目标.任何dropzone配置代码都是必需的.

解决方法

对于可能也会跳到这个问题的人,我想分享我的工作场景(无服务器与AWS Lambda).

注意:在我的Vue S3 Dropzone component中可以找到完整的示例,与Dropzone和S3相关的代码实际上与框架无关.

基本上,

>客户端(浏览器)调用AWS Lambda函数获取添加的每个文件的预签名上载URL.
>当响应中返回预签名URL时,客户端将立即触发dropzone.processFile.
>当正在处理文件时,相应地更改文件的dropzone.options.url.

提示

>当我正在签署一个PUT上传URL时,我将使用xhr.send函数hijack,否则Dropzone将始终在formData中发送文件,这对于PUT上传是不利的.

最终的客户端代码

// In the `accept` function we request a signed upload URL when a file being accepted
accept (file,done) {
  lambda.getSignedURL(file)
    .then((url) => {
      file.uploadURL = url
      done()
      // And process each file immediately
      setTimeout(() => dropzone.processFile(file))
    })
    .catch((err) => {
      done('Failed to get an S3 signed upload URL',err)
    })
}

// Set signed upload URL for each file being processing
dropzone.on('processing',(file) => {
  dropzone.options.url = file.uploadURL
})

最终的AWS Lambda代码

var AWS = require('aws-sdk')
var s3 = new AWS.S3();
// Make sure you set this env variable correctly
var bucketName = process.env.AWS_BUCKET_NAME

exports.handler = (event,context) => {
    if (!event.hasOwnProperty('contentType')) {
        context.fail({ err: 'Missing contentType' })
    }

    if (!event.hasOwnProperty('filePath')) {
        context.fail({ err: 'Missing filePath' })
    }

    var params = {
        Bucket: bucketName,Key: event.filePath,Expires: 3600,ContentType: event.contentType
    }

    s3.getSignedUrl('putObject',params,(err,url) => {
        if (err) {
            context.fail({ err })
        } else {
            context.succeed({ url })
        }
    })
}

演示

原文地址:https://www.jb51.cc/js/150985.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐