package io.loli.sc.server.util; import io.loli.aliyun.oss.StorageException; import io.loli.aliyun.oss.StorageFile; import io.loli.aliyun.oss.StorageFolder; import io.loli.sc.server.entity.StorageBucket; import io.loli.sc.server.service.BucketService; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; import java.time.LocalDateTime; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import com.aliyun.openservices.oss.OSSClient; @Named @Singleton public class StorageFolders { private static StorageFolder root = null; @Inject public BucketService bucketService; public StorageFolder getRootFolder() { if (root == null) { StorageBucket bucket = bucketService.singleFileBucket(); OSSClient client = new OSSClient(bucket.getUploadUrl(), bucket.getAccessKeyId(), bucket.getAccessKeySecret()); root = StorageFolder.getRootFolder(client, bucket.getName()); } return root; } public StorageFolder getDayFolder() { LocalDateTime now = LocalDateTime.now(); int year = now.getYear(); int month = now.getMonthValue(); int day = now.getDayOfMonth(); try { return this.getRootFolder().getSubFolder(String.valueOf(year)).getSubFolder(String.valueOf(month)) .getSubFolder(String.valueOf(day)); } catch (StorageException e) { return this.getRootFolder(); } } public StorageFile uploadFile(Path path) { try { return this.getDayFolder().createSubFile(path); } catch (StorageException | IOException e) { throw new RuntimeException(e); } } public StorageFile uploadFile(File file) { try { return this.getDayFolder().createSubFile(file.toPath()); } catch (StorageException | IOException e) { throw new RuntimeException(e); } } @SuppressWarnings("finally") public InputStream getFile(String key) throws FileNotFoundException { InputStream is = null; try { is = this.getRootFolder().getSubFile(key).getStream(); } catch (StorageException e) { throw new FileNotFoundException("File not found at root folder with key: " + key); } finally { return is; } } }