2017-04-03 15 views
0

그래서 ExcelJS을 사용하여 Excel 파일을 만듭니다. 현재 파일을 디스크에 저장하고 있습니다. 파일에 추가 할 데이터가 API 호출에서 들어옵니다.ExcelJS의 출력을 NodeJS의 Azure Blob 저장소에 업로드

let options = { 
    filename: 'pathtofile', 
    useStyles: true, 
    useSharedStrings: true 
} 

let workbook = new Excel.stream.xlsx.WorkbookWriter(options) 
let sheet = workbook.addWorksheet('myWorksheet') 

// add some data to the file 

sheet.commit() 
workbook.commit() 

이제 Azure Blob 저장소에 업로드되도록 변경하고 싶습니다. ExcelJS는 커밋 할 filename 대신 stream을 지정할 수 있습니다. 그래서 Memory Streams JS을 사용하기로 결정했습니다. 이제 옵션이 이렇게 보입니다. 하늘빛 설명서를 읽기에서

let stream = new streams.WritableStream() 

let options = { 
    stream: stream, 
    useStyles: true, 
    useSharedStrings: true 
} 

는 두 개의 가장 적절한 방법은 createBlockBlobFromStream()createWriteStreamToBlockBlob() 것 같다 그들은 모두 읽을 수있는 스트림 (내가 틀렸다면 정정 해줘) 할 것으로 보인다. 이것은 내가 ExcelJS를 사용하여 쓰기 가능한 스트림을 가지고 있기 때문에 멈추었지만 Azure Blob 저장소에 읽기 가능한 스트림이 필요합니다. 분명히 나는 ​​여전히 파일을 디스크에 쓸 수있다. 파일로부터 Readable Stream을 생성한다; Azure Blob Storage에 업로드 한 후에 파일을 삭제하면되지만 오버 헤드가 많습니다. 나는 이것에 대해 정말로 로터리 방식으로 갈 것인가? A는 섹션 Streaming XLSX Writer에 설명이

답변

0

: 어느 스트림이나 파일 이름은 옵션에서 지정하면

는 통합 문서 작성자는 메모리에 XLSX 통합 문서의 내용을 저장하는 streambuf의 객체를 생성합니다. workbook.stream 속성을 통해 액세스 할 수있는이 StreamBuf 객체는 stream.read()에서 직접 바이트에 액세스하거나 내용을 다른 스트림으로 파이프하는 데 사용할 수 있습니다.

let blobSvc = azure.createBlobService(); 

let options = { 
    useStyles: true, 
    useSharedStrings: true 
} 

let workbook = new Excel.stream.xlsx.WorkbookWriter(options) 
let sheet = workbook.addWorksheet('myWorksheet') 
sheet.columns = [ 
    { header: 'Id', key: 'id', width: 10 }, 
    { header: 'Name', key: 'name', width: 32 }, 
    { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 } 
]; 
sheet.commit() 
workbook.commit() 
workbook.stream.pipe(blobSvc.createWriteStreamToBlockBlob('mycontainer','test.xlsx',function(err,result){ 
    if(err)console.log(err) 
    console.log(result); 
})) 
:

그래서 당신은 filenameoptions에서 설정을하지 않고, 다음과 같은 코드를 시도 할 수 있습니다