【问题标题】:Source for fs Nodefs 节点的来源
【发布时间】:2020-12-15 13:08:03
【问题描述】:

我目前正在对 HTML 元素进行一些编程。在代码中,我将文件上传到 s3 存储桶。为此,我正在使用以下来源的 aws-sdk 节点:

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.24.min.js"></script>

但是我也需要使用 fs 节点,但是我不知道使用该节点的来源。

这是我要使用的代码:https://gist.github.com/sevastos/5804803

是否有人知道此节点的源 URL 或可用于此代码的类似源 URL。谢谢。

另外一种方法可以将此代码更改为分段上传也一样好。此代码在 HTML 元素中工作,用于发送小于 6MB 的文件。 (链接和ID是文件名标识,不相关)

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.24.min.js">
</script>

<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js">
</script>

<script type="text/javascript">

window.onmessage = (event) => {

if (event.data) {
    if (event.data[5] === "Start"){
        Start(event.data[0], event.data[1], event.data[2], event.data[3], event.data[4])
    } else{
        document.getElementById("GoogleSheetsDocs").innerHTML = event.data;
    }

}

};

function sendLoadMessage () {

window.parent.postMessage("LoadOk1", "*");

}
function postMsg(msg) {
   window.parent.postMessage(msg, "*");
}

function Start(bucketName1, bucketRegion1, IdentityPoolId1, link, ID) {
    var bucketName = bucketName1;
    var bucketRegion = bucketRegion1;
    var IdentityPoolId = IdentityPoolId1;
    AWS.config.update({
                  region: bucketRegion,
                  credentials: new AWS.CognitoIdentityCredentials({
                      IdentityPoolId: IdentityPoolId
                  })
              });

              var s3 = new AWS.S3({
                  apiVersion: '2006-03-01',
                  params: {Bucket: bucketName}
          });
  s3upload(s3, bucketRegion, bucketName1, link, ID)
}
</script>

<div>        
   <input type="file" id="fileUpload">    
</div>    
<div> 
   <button onclick="Start('EXAMPLEBUCKET', 'eu-west-2', 'eu-west-2:EXAMPLECODE', 'link', 'ID')">Submit</button>    
     
</div>  
  
<progress max="100" value="0" id="Process1" ></progress>

<script type="text/javascript">
function s3upload(s3, bucketRegion, bucketName1, link, ID) {
    var files = document.getElementById('fileUpload').files;
    if (files) {
            var file = files[0];
            var n = file.name.lastIndexOf(".");
            var res = file.name.substring(n, file.name.length);
            var fileName = link + res;
            var filePath = 'Projects/' + ID + '/Documents/' + fileName;
            var fileUrl = 'https:s3//' + bucketRegion + '.amazonaws.com/' + bucketName1 + '/' +  filePath;
        s3.upload({
            Key: filePath,
                Body: file,
                ACL: 'public-read'
            }, function(err, data) {
            if(err) {
            reject('error');
            }
            alert('Successfully Uploaded!');
            }).on('httpUploadProgress', function (progress) {
            var uploaded = parseInt((progress.loaded * 100) / progress.total);
            $("progress").attr('value', uploaded);
        
        }); 
   }
};

</script>



<body onload="sendLoadMessage ();" style="background-color:white;">

<div id="GoogleSheetsDocs"></div>

</body>

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-s3 fs


    【解决方案1】:

    fs 模块是 Node.js 内置的。它不是用 JavaScript 编写的,在 Node.js 之外不可用,并且执行浏览器中提供给 JS 的 API 无法实现的事情(例如读取和写入本地文件!)。

    【讨论】:

    • 谢谢。我想有人提到了一个叫做“FileReader”的东西,并将我链接到这个:w3.org/TR/FileAPI你知道我怎么用这个吗?或者我可以让代码在 HTMl 元素中工作的任何其他方式。我所需要的只是能够将 MultiPart(或大型)上传到 s3 存储桶。
    【解决方案2】:

    您无法从浏览器访问 Node.js API。 Node.js 是与 Web 浏览器不同的执行环境,因此具有不同的功能。出于安全原因,网络浏览器限制了您可以执行的操作。

    我在你的评论中看到了

    我只需要能够将 MultiPart(或大型)上传到 s3 存储桶。

    在这种情况下,您可以在您的服务器上生成一个预签名的 s3 url,然后在您允许他们上传时将其发送给客户端。预签名 URL 在一定时间内有效。您应该只在服务器端生成它们,因为您需要提供 IAM 凭证来创建 URL。

    查看本教程了解更多信息:https://softwareontheroad.com/aws-s3-secure-direct-upload/

    【讨论】:

    • 谢谢你的链接,我已经看过了。该代码需要 aws-sdk 和 express。你知道 express 作为源代码我可以在 html 中使用吗?
    • @Anralore 不,您需要在 node.js 中运行 express。您需要以一种或另一种方式安全地与 s3 交互的服务器。
    • 我正在写一个小型的wix网站。我只能访问 wix Javascript 代码和 HTML 元素。我已经在 HTML 元素中有工作代码,可以将小于 6MB 的文件上传到 s3 存储桶,但我还需要发送更大文件的代码;例如使用 Multi Part 或 Managed Upload 之类的。如果有帮助的话,我可以展示用于发送小文件的代码吗?
    • 另外一种将用户上传的文件从 HTML 元素中获取到 wix JavaScript 的方法可以工作,因为我可以在那里使用节点,但是我无法做到这一点,因为它总是返回文件的错误不是对发送有效的特定类型。
    • 您可以将其编辑到您的原始问题上,看看是否有人熟悉 Wix 的小部件。
    最近更新 更多