📅  最后修改于: 2023-12-03 15:37:46.756000             🧑  作者: Mango
在 Azure 函数上使用 Node.js 上传文件是一个非常常见的任务。在本文中,我们将介绍如何在 Azure 函数的 Node.js 环境中上传文件,并将文件保存到 Blob 存储中。
首先,我们需要创建一个 Blob 存储帐户,用于存储上传的文件。在 Azure 门户中,创建新的存储帐户非常简单。只需遵循以下步骤:
接下来,我们需要创建一个 Azure 函数,以处理文件上传。我们将使用 Node.js 作为函数的运行时。
现在,我们将编写 Node.js 代码,以实现上传文件到 Blob 存储。我们使用 Azure 的 Node.js SDK 和 Multer 模块来处理文件上传。
以下是上传文件的代码片段:
const { BlobServiceClient } = require('@azure/storage-blob');
const multer = require('multer');
const inMemoryStorage = multer.memoryStorage();
const uploadStrategy = multer({ storage: inMemoryStorage }).single('image');
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
await uploadStrategy(req, context.res, async function (err) {
if (err) {
context.log('Error uploading file:', err);
context.res.status(500).send({ error: 'Error uploading file.' });
} else {
context.log('File uploaded successfully!');
const blobServiceClient = BlobServiceClient.fromConnectionString(process.env['AzureWebJobsStorage']);
const containerName = 'images';
const containerClient = blobServiceClient.getContainerClient(containerName);
const blobName = `image-${Date.now()}.jpg`;
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const fileContent = req.file.buffer;
const fileSize = req.file.size;
await blockBlobClient.upload(fileContent, fileSize);
context.res.status(200).send({ message: 'File uploaded successfully.' });
}
});
};
现在我们已经完成了上传文件的代码,可以将它部署到 Azure 函数应用中并测试它了。我们可以使用 Postman 或类似的工具来测试函数应用。
以下是测试代码的代码片段:
const axios = require('axios').default;
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('image', fs.createReadStream('image.jpg'));
axios.post('https://<FUNCTION_URL>', form, {
headers: {
...form.getHeaders()
}
}).then((res) => {
console.log('Upload success:', res.data);
}).catch((err) => {
console.error('Error uploading file:', err.message);
});
本文介绍了如何在 Azure 函数的 Node.js 环境中上传文件,并将文件保存到 Blob 存储中。我们使用了 Azure 的 Node.js SDK 和 Multer 模块来处理文件上传。上传文件是一项非常常见的任务,但它的实现方式是非常灵活的。使用本文所述的方法的代码片段,既可以快速实现上传文件,也可以进行定制化开发,以适应更多的业务需求。