本來一開始是寫把圖片上傳到七牛云的,然后發(fā)現(xiàn)上傳后訪問圖片是目,需要使用自己的備案的域名(之前的域名過期了)谤饭,于是轉(zhuǎn)向阿里云OSS。
把七牛云的代碼全刪了后,寫阿里云的叉抡,阿里云的寫好后裁良,發(fā)現(xiàn)阿里云買了儲存空間還要買下行流量,而且對于我這樣的窮逼來說闯传,有點(diǎn)小貴,于是只好又重新轉(zhuǎn)換七牛云,買了個域名并且重寫代碼茂缚。
配置文件
和阿里云一樣首先也是配置文件戏罢,比較簡單
qiniu:
access-key: your access key
secret-key: your secret key
bucket: your bucket name
配置類
然后是配置類(為了方便寫了個配置類用來注入)
/**
* 七牛云配置類
* @create 2019-07-31 16:47
*/
@Configuration
public class QiniuConfig {
@Value("${qiniu.access-key}")
private String accessKey;
@Value("${qiniu.secret-key}")
private String secretKey;
/** 獲取七牛云的Configuration */
@Bean
public com.qiniu.storage.Configuration getQiniuConfig() {
return new com.qiniu.storage.Configuration(Zone.zone2());
}
/** 獲取Auth */
@Bean
public Auth getAuth() {
return Auth.create(accessKey, secretKey);
}
}
主體代碼
public class FileUploadServiceImpl implements FileUploadService {
@Value("${qiniu.access-key}")
private String accessKey;
@Value("${qiniu.secret-key}")
private String secretKey;
@Value("${qiniu.bucket}")
private String bucket;
@Autowired
private Auth auth;
@Autowired
private Configuration configuration;
public Map<String, Object> uploadImage(InputStream inputStream, String suffix) {
UploadManager uploadManager = new UploadManager(configuration);
// 獲取一個隨機(jī)的文件名
String filename = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
// 獲取七牛云提供的 token
String upToken = auth.uploadToken(bucket);
// 七牛云用來獲取返回信息的相應(yīng)
Response response;
// 用來獲取上傳后的圖片地址
String picAddr;
try {
response = uploadManager.put(inputStream, filename, upToken, null, null);
// 返回的 response其實是一個 json,轉(zhuǎn)換為 Map脚囊,然后其中的 key就是上傳的文件名了龟糕,其實就是上面生產(chǎn)的 filename
// 由于域名還未備案完成,所以還不能真正得到圖片直鏈訪問地址悔耘,這里只是得到圖片的文件名
picAddr = new Gson().fromJson(response.bodyString(), Map.class).get("key").toString();
} catch (QiniuException e) {
response = e.response;
log.error("【上傳服務(wù)】上傳圖片發(fā)生出錯誤讲岁!{}", response.toString());
e.printStackTrace();
}
// 這里是前端使用的 editor.md,要求上傳圖片后的返回格式
Map<String, Object> result = new HashMap<String, Object>(3) {{
put("url", "");
put("success", 1);
put("message", "upload success!");
}};
return result;
}
}
就是利用Configuration
衬以、Auth
和UploadManager
來上傳文件和獲取上傳后的返回信息缓艳,使用auth.upToken()
來獲取上傳需要的token信息,然后uploadManager.put()
來上傳文件看峻。