gpt4 book ai didi

javascript - 使用 Nodejs 中的 azure 函数将图像从 URL 上传到 azure blob

转载 作者:行者123 更新时间:2023-12-03 03:52:07 26 4
gpt4 key购买 nike

我有一个要求,用户想要使用 Azure 函数从源 URL 上传图像(假设为“https://homepages.cae.wisc.edu/~ece533/images/airplane.png”)。现在我想做的是调用 fetch 方法并传递图像 URL 并将其转换为 blob,但不知怎的,这似乎不起作用。下面是代码。有没有更好的方法来实现这一点

const { BlobServiceClient } = require("@azure/storage-blob");

const fetch = require("node-fetch");

const multipart = require("parse-multipart");

const AZURE_STORAGE_CONNECTION_STRING = process.env["AZURE_STORAGE_CONNECTION_STRING"];


module.exports = async function (context, req) {
context.log("JavaScript HTTP trigger function processed a request.");

const name =
req.query.name ||
(req.body &&
req.body.secure_url);
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully."
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
// context.log("requested body: ", req.body);



var images = "\""+ req.body.secure_url.toString() +"\"";

context.log("Image URL : ", images);


var bodyBuffer = Buffer.from(JSON.stringify(req.body));
let header = req.headers["content-type"]
let boundary = header.split(" ")[1]
boundary = header.split("=")[1]

// var boundary = multipart.getBoundary(req.headers['content-type']);

var parts = multipart.Parse(req.body, header);


var requestOptions = {
method: 'GET'
};

fetch(images, requestOptions)
.then((response) => {
context.log("Response Blob : ",response.blob())
response.blob()
}) // Gets the response and returns it as a blob
.then((blob) => { main(blob)
}).catch(error => console.log('error', error));

async function main(blob) {
const blobServiceClient = await BlobServiceClient.fromConnectionString(AZURE_STORAGE_CONNECTION_STRING);

const container = "sepik01-rdp-media-assets-migration";
const containerClient = await blobServiceClient.getContainerClient(container);
const blobName = images.toString().replace(/^.*[\\\/]/, "");

context.log("File Name: ", blobName);
const blockBlobClient = containerClient.getBlockBlobClient(blobName);

// const uploadBlobResponse = await blockBlobClient.upload(parts[0].secure_url, parts[0].length);
const uploadBlobResponse = await blockBlobClient.upload(blob, blob.length);
context.res = { body : responseMessage };

context.done();
}









};

最佳答案

当我们使用node-fetch包发送HTTP请求时,response.body将以Readable流的形式返回。然后我们可以使用流将数据上传到azure blob。

例如

const fetch = require("node-fetch");
const { BlobServiceClient } = require("@azure/storage-blob");
const mime = require("mime");

const AZURE_STORAGE_CONNECTION_STRING =""

module.exports = async function (context, req) {
const images = "https://homepages.cae.wisc.edu/~ece533/images/airplane.png";

const requestOptions = {
method: "GET",
};

const response = await fetch(images, requestOptions);

if (!response.ok)
throw new Error(`unexpected response ${response.statusText}`);
const blobName = images.toString().replace(/^.*[\\\/]/, "");
const blobServiceClient = await BlobServiceClient.fromConnectionString(
AZURE_STORAGE_CONNECTION_STRING
);

const containerClient = await blobServiceClient.getContainerClient("image");
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const uploadBlobResponse = await blockBlobClient.uploadStream(
response.body,
4 * 1024 * 1024,
20,
{
blobHTTPHeaders: {
blobContentType: mime.getType(blobName),
},
}
);
context.res = { body: uploadBlobResponse._response.status };
};

enter image description here

关于javascript - 使用 Nodejs 中的 azure 函数将图像从 URL 上传到 azure blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66282155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com