将Next.js中的base64映像上传到Azure存储

bxfogqkk  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(112)

我已经尝试了所有其他的“欺骗”这个问题,但似乎他们中的许多人已经过时了。下面的代码“成功”运行并上传了图像,并正确设置了mimetype,但它没有呈现为图像。base64内容在文件中,但不会在任何图像编辑器或浏览器中呈现。
以下是上传时图像数据的外观:

{
  type: 'Buffer',
  data: [
    137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,
     73,  72,  68,  82,   0,   0,   4,  56,   0,   0,   3,  96,
      8,   6,   0,   0,   0, 201, 106, 216, 155,   0,   0,   0,
      9, 112,  72,  89, 115,   0,   0,  11,  19,   0,   0,  11,
     19,   1,   0, 154, 156,  24,   0,  15, 227,   3,  73,  68,
     65,  84, 120, 156, 204, 253, 119, 184, 157,  85, 181, 254,
     15, 223, 171, 239, 222,  83,   8, 189,  10, 130, 224,   1,
     81, 144,  42, 136, 132, 162,  71,  81, 241, 128, 128, 160,
    210, 148,  46,  82,
    ... 1041133 more items
  ]
}

字符串
下面是我的代码:

const data = req.files?.file.data.toString('base64');
const uploadBlobResponse = await blockBlobClient.upload(data, data.length, { blobHTTPHeaders: { blobContentType: body.mimeType }});


我也试过使用uploadData,但失败了,并出现以下错误:
上载文件时出错TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是string类型,或者是Buffer、ArrayBuffer或Array的示例或类ArrayObject。收到未定义
我觉得这很好笑,因为如果我执行typeof data,它将返回string类型
提前感谢,因为我已经在这一点上撞了几个小时的墙。

cigdeys3

cigdeys31#

Azure Blob存储不以这种方式工作。基本上,blob内容是您上传的数据。在本例中,您将二进制数据转换为base64字符串并上传该字符串,以便blob存储为字符串。
你可以做几件事:

*存储二进制数据。您可以简单地将数据存储为字节数组,而不是将数据转换为base64编码的字符串。然后就可以使用类似<img src="your-blob-url" />的东西来显示图像。
*读取应用程序中的数据。如果你想将数据存储为base64编码的字符串,那么为了显示该数据,你需要读取blob的内容,然后使用类似<img src="data:blob-content-type;base64,your-base64-encoded-content" />的东西。

相关问题