【问题标题】:how to split a buffer into chunks如何将缓冲区拆分为块
【发布时间】:2021-11-29 13:20:40
【问题描述】:

我已尝试解决此问题,但无济于事。我正在将文件上传到服务器。所以,我正在使用 fs.readfilesync(file location path) 来读取文件。当我 console.log 结果我得到一个缓冲区。我的目标是尝试将此缓冲区拆分为 10mbs 大小,因为如果有人上传 100mb 文件,我需要使用公式 100mb / 10mb 拆分该文件。这样我就可以一次获得可以发送到服务器的特定块。所以我的挑战是,我如何将此缓冲区细分为 chunks 。到目前为止,这是我尝试过但一点也不积极的:

缓冲区

缓冲区(1011712) [6, 6, 237, 245, 216, 29, 70, 229, 189, 49, 239, 231, 254, 116, 183, 29, 68, 79, 67, 85, 77, 69, 78, 84, 1, 112, 15, 0, 0, 16, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 141, 68, 59, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...]

  var fileToUpload = fs.readFileSync(folderPath)
                var len = fileToUpload.byteLength
                var fileToUploadBuf = new Uint16Array(fileToUpload)

                for (let i = 0; i < len;) {
                    var chunk = fileToUploadBuf.slice(i, 'how do I get bytes size')
                    if (chunk.length) {
                        console.log('the lenght of chunk is', chunk)
                        i += chunk.length
                    }
                }

【问题讨论】:

    标签: javascript arrays arraylist buffer fs


    【解决方案1】:

    我认为这不可能,我认为您需要将文件作为流发送给您的服务器

    MDN Transfer-Encoding

    这里附上了一个将文件流式传输到 S3 存储的服务器的示例 Node.Js

    包.json

    {
        "name": "custom-server",
        "dependencies": {
            "express": "4.13.3",
            "request": "2.64.0",
            "multiparty": "4.1.2",
            "form-data": "1.0.0-rc3"
        }
    }
    

    索引.js

    var app = require("express")();
    var multiparty = require("multiparty");
    
    app.post("/submit", function(httpRequest, httpResponse, next){
    
        var form = new multiparty.Form();
    
        form.on("part", function(part){
            if(part.filename)
            {
                var FormData = require("form-data");
                var request = require("request")
                var form = new FormData();
    
                form.append("thumbnail", part, {filename: part.filename,contentType: part["content-type"]});
    
                var r = request.post("http://localhost:7070/store", { "headers": {"transfer-encoding": "chunked"} }, function(err, res, body){
                    httpResponse.send(res);
                });
               
                r._form = form
            }
        })
    
        form.on("error", function(error){
            console.log(error);
        })
    
        form.parse(httpRequest);   
       
    });
    
    app.get("/", function(httpRequest, httpResponse, next){
        httpResponse.send("<form action='http://localhost:9090/submit' method='post' enctype='multipart/form-data'><input type='file' name='thumbnail' /><input type='submit' value='Submit' /></form>");
    });
    
    app.listen(9090);
    
    
    

    【讨论】:

    • 一个很好的答案。问题是,不需要使用任何中间件。
    • 我推荐你使用axios,看看下面Github上的讨论/axios-upload-stream
    猜你喜欢
    • 2022-12-22
    • 1970-01-01
    • 2011-01-06
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多