11'use strict' ;
22
3- const { getFileUrl, getPath, saveFile } = require ( '../../repository/storage' ) ;
43const { readFile, sha256 } = require ( './util' ) ;
54const config = require ( '../../../config/server' ) . storage ;
65const fecha = require ( 'fecha' ) ;
@@ -9,49 +8,55 @@ const JSZip = require('jszip');
98const mime = require ( 'mime-types' ) ;
109const path = require ( 'path' ) ;
1110const pickBy = require ( 'lodash/pickBy' ) ;
11+ const Storage = require ( './' ) ;
1212
1313const getStorageUrl = key => `${ config . protocol } ${ key } ` ;
14+ const storage = new Storage ( config ) ;
1415
1516function getUrl ( req , res ) {
1617 const { query : { key } } = req ;
17- return getFileUrl ( key ) . then ( url => res . json ( { url } ) ) ;
18+ return storage . getFileUrl ( key ) . then ( url => res . json ( { url } ) ) ;
1819}
1920
20- async function upload ( { file, body, user, repository } , res ) {
21+ async function upload ( { file, body, user } , res ) {
22+ const { folder, unpack } = body ;
2123 const { name } = path . parse ( file . originalname ) ;
22- const { id : repositoryId } = repository ;
23- if ( body . unpack ) {
24+ if ( unpack ) {
2425 const timestamp = fecha . format ( new Date ( ) , 'YYYY-MM-DDTHH:mm:ss' ) ;
2526 const root = `${ timestamp } __${ user . id } __${ name } ` ;
26- const assets = await uploadArchiveContent ( repositoryId , file , root ) ;
27+ const assets = await uploadArchiveContent ( folder , file , root ) ;
2728 return res . json ( { root, assets } ) ;
2829 }
29- const asset = await uploadFile ( repositoryId , file , name ) ;
30+ const asset = await uploadFile ( folder , file , name ) ;
3031 return res . json ( asset ) ;
3132}
3233
3334module . exports = { getUrl, upload } ;
3435
35- async function uploadFile ( repositoryId , file , name ) {
36+ async function uploadFile ( folder , file , name ) {
3637 const buffer = await readFile ( file ) ;
3738 const hash = sha256 ( file . originalname , buffer ) ;
3839 const extension = path . extname ( file . originalname ) ;
3940 const fileName = `${ hash } ___${ name } ${ extension } ` ;
40- const key = path . join ( getPath ( repositoryId ) , fileName ) ;
41- await saveFile ( key , buffer , { ContentType : file . mimetype } ) ;
42- const publicUrl = await getFileUrl ( key ) ;
41+ const keyComponents = [ folder , fileName ] . filter ( Boolean ) ;
42+ const key = path . join ( ...keyComponents ) ;
43+ await storage . saveFile ( key , buffer , { ContentType : file . mimetype } ) ;
44+ const publicUrl = await storage . getFileUrl ( key ) ;
4345 return { key, publicUrl, url : getStorageUrl ( key ) } ;
4446}
4547
46- async function uploadArchiveContent ( repositoryId , archive , name ) {
48+ async function uploadArchiveContent ( folder , archive , name ) {
4749 const buffer = await readFile ( archive ) ;
4850 const content = await JSZip . loadAsync ( buffer ) ;
4951 const files = pickBy ( content . files , it => ! it . dir ) ;
5052 const keys = await Promise . all ( Object . keys ( files ) . map ( async src => {
51- const key = path . join ( getPath ( repositoryId ) , name , src ) ;
53+ const keyComponents = [ folder , name , src ] . filter ( Boolean ) ;
54+ const key = path . join ( ...keyComponents ) ;
5255 const file = await content . file ( src ) . async ( 'uint8array' ) ;
5356 const mimeType = mime . lookup ( src ) ;
54- await saveFile ( key , Buffer . from ( file ) , { ContentType : mimeType } ) ;
57+ await storage . saveFile ( key , Buffer . from ( file ) , {
58+ ContentType : mimeType
59+ } ) ;
5560 return [ key , getStorageUrl ( key ) ] ;
5661 } ) ) ;
5762 return fromPairs ( keys ) ;
0 commit comments