package io.loli.box.service.impl;
import com.qiniu.api.auth.AuthException;
import com.qiniu.api.auth.digest.Mac;
import com.qiniu.api.io.IoApi;
import com.qiniu.api.io.PutExtra;
import com.qiniu.api.io.PutRet;
import com.qiniu.api.rs.PutPolicy;
import com.qiniu.api.rs.RSClient;
import io.loli.box.service.AbstractStorageService;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
/**
* @author choco
*/
@Component
@ConditionalOnProperty(name = "storage.type", havingValue = "qiniu")
@ConfigurationProperties(prefix = "storage.qiniu")
public class QiniuStorageService extends AbstractStorageService {
private String url;
private String key;
private String secret;
private String name;
private Mac mac;
@PostConstruct
private void init() {
mac = new Mac(key, secret);
}
@Override
public String upload(InputStream is, String filename, String contentType, long length) throws IOException {
PutPolicy putPolicy = new PutPolicy(name);
String uptoken = null;
try {
uptoken = putPolicy.token(mac);
} catch (AuthException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
PutExtra extra = new PutExtra();
if (StringUtils.isNotBlank(contentType)) {
extra.mimeType = contentType;
}
PutRet ret = IoApi.Put(uptoken, "images/" + filename, is, extra);
return filename;
}
@Override
public void deleteFile(String filename) {
super.deleteFile(filename);
RSClient client = new RSClient(mac);
client.delete(name, "images/" + filename);
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}