\’ùˇˇsÀîKñ%Àñ{ÔΩ˜ÇmåczB

问题描述 投票:0回答:1
Node Binary encoding

PNG

IHDRBԂ cHRMz%u0:o_FgAMAaƠIDATxw

这是我的用例,我正在创建一个将文件上传到MediaValet(一个多媒体组织系统)的服务。他们上传文件的文档是

这里

. 我已经尝试使用Azure-Storage库,但它似乎不想将文件上传到blob,而是允许你创建新的Blob系统(可能也可能是错误的,但它似乎被埋没,如果这样)。

第一步是做一个POST请求,创建一个占位符,返回一个SAS URL。然后对SAS URL做一个PUT请求,主体是二进制段。

我的问题,我是对图片URL进行GET请求,并将编码设置为null,从而返回一个缓冲区的body。如果我用FS createWriteStream创建一个新的PNG文件,它就会完美地渲染。如果我将其编码为base64,然后在不同的网站上进行解码,也可以渲染。但是,当我用二进制体执行PUT请求时,Azure接受它并上传图像,但它从未在MediaValet中渲染。它显示一个占位符图标,而不是。

我猜测 Azure 期待不同的标题或参数,但 MediaValet 文档没有提供任何关于如何构建请求的帮助。我一直在与那里的一些联系人合作,他们正在进行一些内部调查以弄清问题,但我想我也会与大家一起检查。

我注意到,当我在本地机器上检查PNG的二进制文件时,如果我在NodeJS中把图像编码为二进制文件,它的显示方式会有所不同。

本地机器

âPNG

IHDRBÿ'ÇÛ cHRMz%ÄɢˇÄÈu0Í:òoí_≈FgAMA±è¸a∆†IDATx⁄Ï'wpng;base64,

它创建了一个数据图像,当我上传到 图片转Base64 的网站上,它正确渲染,所以我知道编码确实允许图像保持完整。下面是我正在做的GET图像并将其编码为base64的代码。我已经尝试了许多其他的选项,比如将编码改为二进制或创建一个新的Buffer.from(),编码为base64和二进制。所有的结果都允许我上传,但图片从来没有在App中渲染。如果您能提供任何帮助,我们将非常感激。

更新:下面是上传请求的有效载荷,当你向Azure Blob服务发出POST请求时,返回的是SAS URL。

const request = require('request');

const uri = 'https://img2.pngio.com/stack-overflow-text-png-download-1024257-free-transparent-stack-overflow-png-900_240.jpg';

request.get({ uri, encoding: null }, (err, res, body) => {
    console.log(body.toString('base64'))
});

    uri: 'https://OBFUSCATED.blob.core.windows.net/medialibrary-OBFUSCATED/OBFUSCATED/OBFUSCATED/Original/1571880311.png?sv=2017-04-17&sr=b&sig=KHCrukoT16oc0s%2Bjqt%2Fow3CGjIc0rxYPdvRMgbErUtw%3D&st=2020-06-09T22%3A13%3A48Z&se=2020-06-11T22%3A28%3A48Z&sp=rw',
    headers: {
      'Content-Length': 50965,
      'Content-Type': 'image/png; charset=UTF-8',
      'x-ms-blob-content-type': 'image/png',
      'x-ms-date': 'Tue, 09 Jun 2020 22:28:48 GMT',
      'x-ms-blob-type': 'BlockBlob'
    },
    body: 'data:image/png;base64,iVBO\NOBFUSCATED'
}```
这是我的用例,我正在创建一个服务,将文件上传到MediaValet(一个多媒体组织系统)。他们上传文件的文档在这里。我已经尝试使用 Azure-...
node.js azure binary base64 azure-storage-blobs
1个回答
1
投票

. 这是一个放的动作。例如

var request = require('request')
request.get({url:'https://img2.pngio.com/stack-overflow-text-png-download-1024257-free-transparent-stack-overflow-png-900_240.jpg', encoding: null}, function (error, response, body) {
    if (!error && response.statusCode == 200) {
       const options={uri: 'https://<>.blob.core.windows.net/image/image11.jpeg?<sas token>',
       headers: {
         'Content-Type':  response.headers["content-type"] +'; charset=UTF-8',
         'x-ms-blob-content-type': response.headers["content-type"],
         'x-ms-blob-type': 'BlockBlob'
       },
       body: body}

       request.put(options,  function (error, response, body){
        //if we successfully upload, we will get stauscode 201
        console.log(response.statusCode)
       })
    }
});

enter image description hereenter image description here

© www.soinside.com 2019 - 2024. All rights reserved.