Java バックグラウンドへの WeChat アプレット画像のアップロード

序文

クラウド ストレージ ファイルのアップロードに関しては、本当に多くのことを言いたいのですが、これは、SpringBoot のクラウド ストレージの小さなプログラムまたはプロセス全体に基づく、純粋にオリジナルの記事です。
教育全体は非常に詳細で、すべての Java 学習者、特に Java の学習を終えたばかりで手を練習したい人に適しています。



クラウドストレージの使い方と理解について!

クラウド ストレージとは、名前が示すように、ファイル (ここでは通常、写真、ビデオ、およびもちろんその他のファイル タイプを指します) をクラウド サーバーに保存することです. クラウド サーバーでは、写真はアルゴリズムによって圧縮されて保存されます.接続アドレスの形式で返されます。
ここで、プロの総合的なプロジェクトを書いていたときに写真を扱う方法がわからなかったため、クラウドストレージを使用することを考えました. 私はたまたまこの問題に遭遇し、Web 経由ではないファイル処理に触れたのも初めてだったので、当時は戸惑いましたが、確かなことは、ファイルのアップロードとダウンロード。現時点では、ファイルのアップロードとダウンロードを直接記述していませんでしたが、当時は、アプレットを介してファイルをアップロードおよびダウンロードする方法を知りませんでした。サーバースペースを無駄にします。この前、私は自分のブログを書いていました. 当時、私のサーバーにはたくさんの写真が保存されていました. 写真は圧縮されておらず、写真は非常に大きかった. ブログにアクセスすると、同時に多くの写真が読み込まれました.時間. キャッシュがない場合は、読み込みが非常に遅く、一部の CSS でさえ読み込めません。だから、これは私には意味がありません。そこで大胆なアイデアを思いついたのですが、ピクチャーベッド初めてTubedに触れたのはブログを書いていた時で、データベースから出さなければならない写真が大量にあったので、非常に使いやすいTubedという方法を見つけ、そしてそれは接続を使用し、私の写真を の形式で保存します。アドレスにアクセスする限り、私の写真を取得できます。また、フロント エンドも適合するため、最初はアプレット (フロント エンド) からファイルを転送したいと考えていました。ファイルのアップロードとダウンロードを介して直接バックグラウンドに送信し、そのファイルをピクチャー ベッドの Web サイトにアップロードし、ピクチャー ベッドの Web サイトにリクエストを送信します。これはアイデアで、確認に行ったわけではありませんが、マップベッドもアドレスを返すため、実現可能だと思います。このとき、クラウドストレージについて学ぶことを余儀なくされました。
ピクチャーベッドの本質は実はクラウドストレージと同じ!ピクチャーベッドは写真アップの返信先、クラウドストレージも!

この記事では、クラウドストレージの最も基本的な使用方法と実装方法について詳しく紹介します。


提示:以下代码仅供参考

1. クラウドストレージとは?

簡単な理解: ファイルをクラウド サーバーに転送し、アクセス アドレスに戻すことです。

2.クラウドストレージを使用する理由

1. 私の理解

たとえば、ユーザーが私にファイルを転送した場合、このファイルをどのように処理すればよいですか? ファイルをローカルに直接保存し、ローカル パスを使用してデータベースに保存し、フロント エンドで表示する必要があるときにファイル パスを介してファイルを表示しますか? これは実現可能ですが、プロジェクトとデータを 1 つのサーバーに保存するのは無理だと思います。これにより、プロジェクト サーバーの負荷が軽減されます。使用時に、ローカル サーバーに保存されている画像は圧縮されません。サーバー エラーシステムで発生すると、データ エラーや損失が発生しやすくなり、プロジェクトのスケーラビリティが大幅に低下します。最初は、ファイルを取るときにこのように保存するのは非常に面倒で保存しにくいと感じていました。写真をピクチャーベッドの形で保管しているからです。
そこでクラウドストレージです。

2. クラウド ストレージとは何ですか? なぜクラウド ストレージを使用する必要があるのですか? 利点?

私の理解: 情報を確認したところ、クラウド ストレージは実際にはデータを格納するサーバーであり、クラウド ストレージはデータをクラウドに格納することです。もちろん、やっぱり他社のサーバーにあるので、絶対安全というわけではありませんが、私たちの学習や育成には、とても良いと思います。
ここでは、大きなファイルのようなデータをクラウド ストレージに入れます。これにより、エンジニアリング サーバーの負荷が軽減されます。クラウド ストレージは画像を圧縮し、画像をクラウドに入れ、画像ベッドの形で返します。
最も重要なことは、より便利な形でデータベースに保存できるピクチャーベッドの形で返されることです。
これは、写真を保存し、写真を外部の世界にリンクできるようにする専用のオンライン スペースです。実際にはリンクであり、リンクにアクセスして写真を取得できます。
例:
http://baidu.com/6plmqdj5bcr

3.クラウドストレージを利用する

1. クラウド ストレージ アカウントを作成する

アリババ クラウド、テンセント クラウド、ファーウェイ クラウドを利用できますが、ここでは例として Qiniu クラウドを使用します。
Qiniu クラウド登録 => ここに画像の説明を挿入
=>
作成後、独自のドメイン名空間をバインドするよう求められますが、ここでは無視できます.
ここに画像の説明を挿入
登録済みのドメイン名がある場合は、登録済みのドメイン名を入力してください.そうでない場合独自のテスト ドメイン名を使用できます.
ここに画像の説明を挿入
ストレージ スペース名: 一意で重複不可.
ストレージ エリア: オプションでデフォルト.
アクセス制御: パブリックを選択します.

2. クラウド ストレージ スペースにファイルをアップロードする

独自のスペース管理をクリックし、ファイルのアップロードをクリックし、アップロードするファイルを選択し、
ここに画像の説明を挿入
アップロードが成功したら、

詳細をクリックします
ここに画像の説明を挿入

リンクアドレスにアクセスすると、アップロードした写真を開くことができます!

4. クラウドストレージ機能をJavaで実現する方法

1.トークン

トークンとは: クラウド ストレージ サーバーにリクエストすることにより、base64 で暗号化されたデータが返されます.これは、java がファイルをクラウド ストレージ スペースにアップロードするための資格情報です, たとえば、アカウント番号 + パスワード. ここでの HTTP リクエストは、 request us to use the RestTemplate to make the request
. 代わりに、Qiniu Cloud または Alibaba Cloud サーバーが、独自の http 要求メソッドを備えた SDK (ソフトウェア開発キット) を提供してくれました。

Qiniu クラウド SDK のインポート

		<dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.10.2</version>
        </dependency>

Qiniu クラウド JavaSDK ドキュメント: https://developer.qiniu.com/linking/6279/linking-java-sdk

Java を使用して、Qiniu クラウド ストレージのトークン インターフェイスを取得します。

パラメータについて学習します。
accessKey secretKey バケツ
accessKey secretKey Qiniu Cloud アカウント キー。Qiniu Cloud ユーザーとしての唯一の資格情報として、
ここに画像の説明を挿入
バケットはスペース名です。
ここに画像の説明を挿入

トークンを取得するには、まずこれら 3 つのパラメーターを取得する必要があります。アップロード プロセス
ここに画像の説明を挿入

エンティティ クラス:

@Data
public class QiNiu {
    
    
    private String token;
    private String key;
}

トークンを取得

QiNiu qiNiu = new QiNiu();


    // 获取 七牛云的 token
    @RequestMapping(value = "/getToken", method = RequestMethod.GET)
    public String getToken() {
    
    
        String accessKey = "自己的accessKey";
        String secretKey = "自己的secretKey";
        String bucket = "自己的空间名";
        long expireSeconds = 600;   //过期时间
        StringMap putPolicy = new StringMap();
        //auth是七牛SDK封装的类,我们需要将我们的唯一标识符传进去
        Auth auth = Auth.create(accessKey, secretKey);
        //这里的第二个参数是key 而在请求时,内部已经有指定key了 要么这里写指定key 要么为null
        String upToken = auth.uploadToken(bucket,null,expireSeconds,putPolicy);
        qiNiu.setKey(UUID.randomUUID().toString().replaceAll("\\-", ""));
        qiNiu.setToken(upToken);
        return qiNiu.getToken();
    }

クラウドストレージにアップロード

@GetMapping(value = "/qiniu/upload")
    public Result UpLoad(){
    
    
        Result result = new Result();
        Configuration cfg = new Configuration(Region.huanan());//Region.huanan()对应自己的存储区域 默认为region
        UploadManager uploadManager = new UploadManager(cfg);
        String token=qiNiu.getToken();
        String key=qiNiu.getKey();
        String url="";//这里是你的域名地址 测试域名或者是备案域名
        String filePath="你电脑的图片地址";
        try {
    
    
        	//这里的key 就是我们刚刚用uuid随机生成的,意味着将文件名重置,避免重复
            Response response = uploadManager.put(filePath,key,token);
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            //返回的key 就是我们的文件名
            System.out.println(putRet.hash);
            String imageUrl=url+putRet.key;
            result.setData(imageUrl);
            return result;
        } catch (QiniuException e) {
    
    
            e.printStackTrace();
            result.setMessage("err");
            return result;
        }
    }

ここでもう 1 つ追加する必要があります。フロント エンドからファイルを渡す場合、ストリームの形式でファイルを直接アップロードおよびダウンロードできるため、Java バックグラウンドでのみキャッシュされ、Java バックグラウンドには保存されません。あなたのサーバー!

2. ミニプログラムの前後分離を利用してアップロードする方法

フローチャート

ここに画像の説明を挿入

コード

 wx.request({
    
    
                url: 'xxxxxx/getToken',
                method: 'GET',
                header: {
    
    
                  'Content-Type': 'application/x-www-form-urlencoded',
                },
                success:function(res){
    
    
                  token = res.data;
                  wx.uploadFile({
    
    
                    url:'你空间所在对应的上传区域地址',
                    //详情地址可见官网
                    filePath: fileName,//你的文件
                    name: 'file',//文件类型
                    formData:{
    
    
                      'token':token,//java返回给你的token
                      'key':key //可以用random函数生成随机key
                    },
                    success(res) {
    
    
                        var data=res.data;//返回的hash和key
                        if(typeof data==='string')data = JSON.parse(data.trim());//解压缩
                        url= '你的测试域名或者你的备案域名' + data.key,
                        that.setData({
    
    
                          url:url
                        })
                        wx.request({
    
    
                          url: '你的图片返回请求',
                          method: 'POST',
                          header: {
    
    
                            'Content-Type': 'application/x-www-form-urlencoded',
                          },
                          data:{
    
    
                          url:url 
                          },

要約する

トークンを取得するときに間違ったバケットまたはキーの値を記述した場合、トークンを返すことはできますが、検証中にエラーが発生することに注意してください。
この記事が役に立ったと思われる場合は、高評価をお願いします。

その他のファイルのアップロードとダウンロードファイル
アップロードとダウンロードここに、私の WeChat アプレット オープン ソース プロジェクトを示します。
プロジェクト アドレス:
https://github.com/CaseOfShe/school

おすすめ

転載: blog.csdn.net/weixin_53690059/article/details/124761687