Azure에 Node.js에서 이미지를 저장하거나 DL
Azure에 Node.js에서 이미지 저장 준비 편 계속이지만 Azure Blob Storage에 이미지를 업로드하고 반대로 다운로드하여 로컬로 저장을 시도합니다.
우선, Blob Storage 내에서의 개념으로서,
コンテナ=フォルダ的な概念
, blob=ファイル的な概念でコンテナ内に作成される
라고 현재 생각하고 있습니다.이미지 준비 등
우선은 이용하는 화상을 준비해 보았습니다.
n0bisuke.jpg
이전에 시도한 코드로
hello
라는 문자열을 보내고 있었으므로, 그 코드를 그대로 사용하여 base64 변환하여 보냅니다.이미지 업로드
uploadimage.js
'use strict';
const { BlobServiceClient, StorageSharedKeyCredential, ContainerClient } = require("@azure/storage-blob");
//ファイルを利用
const fs = require(`fs`);
const FILE_PATH = `n0bisuke.jpg`;
//画像ファイルをbase64文字列へ
const image_data = fs.readFileSync(FILE_PATH);
const base64_data = "data:image/jpeg;base64," + image_data.toString('base64');
async function main() {
// Enter your storage account name and shared key
const account = process.env.ACCOUNT_NAME || "ストレージアカウント名";
const accountKey = process.env.ACCOUNT_KEY || "キー";
const sharedKeyCredential = new StorageSharedKeyCredential(account, accountKey);
const blobServiceClient = new BlobServiceClient(
`https://${account}.blob.core.windows.net`,
sharedKeyCredential
);
//コンテナを作成した名前に指定
const containerName = `n0bisuke-container1630888214169`;
const containerClient = blobServiceClient.getContainerClient(containerName);
// Create a blob
const content = base64_data; //変換したbase64文字列を使う
const blobName = "newblob" + new Date().getTime();
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const uploadBlobResponse = await blockBlobClient.upload(content, Buffer.byteLength(content));
console.log(`Upload block blob ${blobName} successfully`, uploadBlobResponse.requestId);
}
main().catch((err) => console.error("Error running sample:", err.message));
$ node uploadimage.js
Upload block blob newblob1630891763317 successfully 37db3c29-201e-004e-52c6-a28313000000
newblob1630894950109
라는 blob 이름으로 업로드되었습니다.포털에서도 확인할 수 있었습니다. 6.93KiB라는 것으로 제대로 보존되어 그렇습니다.
이미지 다운로드 및 저장
앞으로는 반대로 DL을 시도해 보겠습니다. 텍스트만으로는 어쩔 수 없기 때문에 화상 파일로서 보존하는 처리까지 써 갑니다.
참고 : Node.js로 이미지 다운로드 및 저장 (axios 사용)
참고 : [Node.js] Base64로 인코딩된 파일 데이터를 디코딩하여 S3로 putObject
이 근처가 참고가 되었습니다.
방금 업로드한
newblob1630891763317
의 blob 이름을 직접 지정합니다.공식 샘플에 있는 streamToBuffer()을 사용하여 문자열로 인코딩하고 base64 문자열에서 데이터 내용을 검색하고
writeFileSync()
로 파일을 저장합니다.dl.js
'use strict';
const { BlobServiceClient, StorageSharedKeyCredential, ContainerClient } = require("@azure/storage-blob");
const fs = require(`fs`);
const FILE_PATH = `n0bisuke.jpg`;
async function main() {
// Enter your storage account name and shared key
const account = process.env.ACCOUNT_NAME || "ストレージアカウント名";
const accountKey = process.env.ACCOUNT_KEY || "キー";
const sharedKeyCredential = new StorageSharedKeyCredential(account, accountKey);
const blobServiceClient = new BlobServiceClient(
`https://${account}.blob.core.windows.net`,
sharedKeyCredential
);
//コンテナを作成した名前に指定
const containerName = `n0bisuke-container1630888214169`;
const containerClient = blobServiceClient.getContainerClient(containerName);
//blobにアクセス
const targetBlobName = `newblob1630891763317`;
const blockBlobClient = containerClient.getBlockBlobClient(targetBlobName);
//blobからデータをダウンロード
const downloadBlockBlobResponse = await blockBlobClient.download(0);
//データを文字列に
const encodedData = (await streamToBuffer(downloadBlockBlobResponse.readableStreamBody)).toString();
//今回は元が画像ファイルだったのでbase64形式のテキストがDLされるので中身を抽出
const fileData = encodedData.replace(/^data:\w+\/\w+;base64,/, '');
//ローカルファイルに書き込み
fs.writeFileSync(`./dl/${FILE_PATH}`, fileData, 'base64');
}
// A helper method used to read a Node.js readable stream into a Buffer
async function streamToBuffer(readableStream) {
return new Promise((resolve, reject) => {
const chunks = [];
readableStream.on("data", (data) => {
chunks.push(data instanceof Buffer ? data : Buffer.from(data));
});
readableStream.on("end", () => {
resolve(Buffer.concat(chunks));
});
readableStream.on("error", reject);
});
}
main().catch((err) => console.error("Error running sample:", err.message));
실행하면 ...
안전하게 저장되었습니다!
encodedData.replace(/^data:\w+\/\w+;base64,/, '');
의 처리를 잊으면, 잘 파일을 표시 할 수 없게 되어 버리므로 주의해 느낌이었습니다.요약
"이미지를 Azure Blob Storage에 업로드 및 다운로드"를 Node.js에서 시도했습니다.
끝나 보니 시원했지만, 처음 가 발광할 것 같았습니다. 웃음
Reference
이 문제에 관하여(Azure에 Node.js에서 이미지를 저장하거나 DL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/n0bisuke/items/2192c1acf0be73398e2b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)