準備
Mavenの
pom.xmlは7頭の牛は-SDK-依存曇らせる追加します
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.27</version>
</dependency>
構成アイテム
七つの牛は、必要な設定をアップロードクラウドがあります:アクセスキー、秘密鍵、バケツ
アクセスキーは、秘密鍵がウェブサイトで見ることができます
あなたの名前のためのバケット収納スペース、次のように:
実現
application.yml設定
upload:
qiniu:
domain: 填你的域名
access-key: 你的accesskey
secret-key: 你的secretKey
bucket: 你的存储空间名,我这里为colablog
私は7頭の牛は、アップロードの設定があり曇らせる見ることができdomain
、この構成では、7頭の牛はストレージドメインをクラウド環境設定のブケットを、でコンテンツ管理、成功は主に戻って返すために、ファイルのアクセス・パスの後にアップロードするファイルのために使用されています。
しかし、これはドメイン名を使用して、30日の限度であるので、あなたはより良いいただきたいバインド新しいドメイン名。
アップロードの設定クラス
使用SpringBoot @ConfigurationProperties
と@Component
設定のアップロードクラスの注釈UploadProperties
、
私はクラスコンフィギュレーション拡張ポイントを残したので、設定のアップロードとアップロードクラウドアップロードまたはその他をアップロードするローカルがあるかもしれないので。クラスは、RabbitMQのコンフィギュレーションを触発されており、この設定カテゴリを分割するために内部のようなので、アップロードの設定は、多くのではありませんので。次のように設定クラスをアップロードします。
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author Johnson
* @date 2019/12/16/ 09:35:36
*/
@Component
@ConfigurationProperties(prefix = "upload")
public class UploadProperties {
private Local local = new Local();
public Local getLocal() {
return local;
}
/**
* @author: Johnson
* @Date: 2019/12/16
* 本地上传配置
*/
public class Local {
...
}
private Qiniu qiniu = new Qiniu();
public Qiniu getQiniu() {
return qiniu;
}
/**
* @author: Johnson
* @Date: 2019/12/16
* 七牛云上传配置
*/
public class Qiniu {
/**
* 域名
*/
private String domain;
/**
* 从下面这个地址中获取accessKey和secretKey
* https://portal.qiniu.com/user/key
*/
private String accessKey;
private String secretKey;
/**
* 存储空间名
*/
private String bucket;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
}
}
七つの牛は、アップロードインタフェースとクラスを曇らせます
次のようにインターフェースをアップロードします。
public interface UploadFile {
String uploadFile(MultipartFile file);
}
アップロードクラス
import cn.colablog.blogserver.utils.properties.UploadProperties;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
/**
* @author Johnson
* @date 2019/12/14/ 17:20:16
* 上传文件到七牛云
*/
public class UploadFileQiniu implements UploadFile {
private UploadProperties.Qiniu properties;
//构造一个带指定Region对象的配置类
private Configuration cfg = new Configuration(Region.region2());
private UploadManager uploadManager= new UploadManager(cfg);
public UploadFileQiniu(UploadProperties.Qiniu properties) {
this.properties = properties;
}
/**
* @author: Johnson
*/
@Override
public String uploadFile(MultipartFile file) {
Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
String token = auth.uploadToken(properties.getBucket());
try {
String originalFilename = file.getOriginalFilename();
// 文件后缀
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String fileKey = UUID.randomUUID().toString() + suffix;
Response response = uploadManager.put(file.getInputStream(), fileKey, token, null, null);
return properties.getDomain() + fileKey;
} catch (IOException e) {
e.printStackTrace();
}
return "error";
}
}
Region
設定、スペースの代わりにアクセス領域、南中国の私の記憶エリア理由。したがって、順番にRegion.region2()
にすることができ、自分の記憶領域を参照するにはスペースの概要下へのビューの、あまりにスクリーンショット、画像の場所がありません。
Region
対応する設定:
さて、準備作業は完了しており、次のように今コールに、クラスを呼び出します。
@RestController
@RequestMapping("/upload")
public class UploadFileController {
@Autowired
UploadProperties uploadProperties;
@PostMapping("/img")
public String uploadFileYun(MultipartFile file) {
// 上传到七牛云
UploadFile uploadFile = new UploadFileQiniu(uploadProperties.getQiniu());
return uploadFile.uploadFile(file);
}
}
それは単純ではないですか?ああおなら!シンプルなウールは、実際には、私が簡略化されましたが、実際には、私のプロジェクトの構造は、これよりも複雑です。
概要
A:Iクラス名になっているUpload
で始まり、クラス名が書かれているが、このクラスのスケーラビリティを制限し、死んだだけアップロード機能で、追加のファイル削除機能ならば、このクラスに追加すべきではありません。今、復興における操作ファイル機能モジュールの(非ファイルアップロード)。
2:最初に私に私のプロジェクトは、多くの場合、ブログのバックオフィスシステムであるため、そう、ファイルアップロードクラスをインスタンス化するために行く前に時間を使用しますが、このニーズが開発シナリオに応じて決定されるように、使用できるファイルのアップロード機能が比較的小さいと思いました写真、アップロードファイルタイプはSpringコンテナに注入することができる、それは(小さいが)の例のオーバーヘッドを低減することができます。ワードはを注入された@Component
クラスのノート。
3:プロファイルは、なぜ私は内部の構成項目クラスの使用は、それを分割すると思いますか?他の人はもちろん、ここで我々は偉大な神のソースを参照して、ソースコードの参照を見て行くことができたときに実際には、我々はいくつかの同様の機能を記述します。私はCIは大きな神がRabbitMQのポイント上の設定項目に書かれている方法を見てみたかったCIを書いていますので。だから、ああ、私は大きな神のためのコードが本当に進歩の欠如である参照してください。
あなたはより詳細な公式文書を見たい場合は、下のリンクをクリックしてください。
最後に:、おかげ♪(・ω・)を読んでくれてありがとうテクノ
個人ブログのURL:https://colablog.cn/
あなたに私の記事が助けた場合、私は公共のマイクロチャネル番号、あなたの記事を共有するための最初の時間に集中することができます