Azure Blob Storage에 파일 업로드 하기 Node(Express) 사용

2020. 10. 29. 15:39Azure

Azure Blob Storage에 파일을 업로드 한다.

 

순서 : 프론트엔드에서 데이터 값과 파일을 업로드 =>  백엔드에서 파일을 Azure Blob Storage으로 컨테이너명, blob데이터명을 정해서 업로드 

 

먼저 라이브러리들을 설치한다.

npm i multer-azure-blob-storage multer

 

먼저 ejs로 프론트 엔드 코드를 작성한다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="/documents" method="POST" enctype="multipart/form-data">
    <label>컨텐츠 이름:</label>
    <input type="text" class="form-control" name="container">
    <label>파일 이름:</label>
    <input type="text" class="form-control" name="name">
      <label>bookdata:</label>
    <input type="file" class="form-control" name="blobData">
      <button type="submit" class="btn">업로드</button>
  </form>
</body>
</html>

이렇게 작성하면되는데 주의할점은 enctype="multipart/form-data" 부분을 꼭 써주어야 한다.

 

azure 포탈에서 본인의 Storage accounts에서 Settings에 있는 Access keys에 들어가 본인의 key값과, Connection String Storage account name, 값을 복사해 가져온다.

 

const multer = require('multer')
const MulterAzureStorage = require('multer-blob-storage').MulterAzureStorage
const connection = 'DefaultEndpointsProtocol=https;AccountName=mystorageaccountname;AccountKey=wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY;EndpointSuffix=core.windows.net' 
const accessKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY'
const accountName = 'mystorageaccountname'

//blob파일명, 경로 설정
const resolveBlobName = (req, file) => {
      //본인이 사용하고 싶은 경로 밑 blob파일명을 설정해주는 로직을 만들어 주면된다.
      //경로 설정 /test/파일이름   =>  컨테이너 명/test/파일명 으로  생성
      const blobName = 'test'/req.body.name 
      return blobName;
};

//컨테이너명도 설정. 컨테이너에서는 경로설정불가
const container = (req, file) => {
  const containerName = req.body.container
  return containerName
}

//메타 데이터도 설정 할 수 있다.
//const resolveMetadata = (req, file) => {
//    return new Promise((resolve, reject) => {
//        const metadata = yourCustomLogic(req, file);
//        resolve(metadata);
//    });
//};

const azureStorage = new MulterAzureStorage({
    connectionString : connectionString 
    accessKey : accessKey
    accountName : accountName
    //컨테이너 명
    containerName: container,
    //blob파일 이름 밑 경로 설정
    blobName: resolveBlobName,
    //메타데이터 
    //metadata: resolveMetadata,
    //'blob' or 'container' or 'private' 으로 업로드 파일 등급을 변경 할수있다.
    containerAccessLevel: 'blob',
    urlExpirationTime: 60
    
});
 
const upload = multer({
    storage: azureStorage
});
 
app.post('/documents', upload.any(), (req, res, next) => {
  console.log(req.files)
  res.status(200).json(req.files)
});

 

이렇게 백 코드를 완성 시켰다. 

 

라이브러리를 사용하면 간단하게 업로드 할 수 있다.

 

참고 : www.npmjs.com/package/multer-azure-blob-storage

 

728x90
반응형