abp vnext 開發快速入門 6 用minio實現上傳圖片


結合前端富文本框上傳圖片功能。abp vnext后端要實現上傳圖片的功能,比較原始的就是接收到文件然后用代碼保存到服務器磁盤,然后根據規則生成圖片鏈接返回給前端即可。但是這樣以后遷移服務器及文件的管理起來很麻煩。也不利於擴容。

現在比較流行使用對象存儲服務來管理文件,於是我們用minio來做對象存儲服務。下面介紹下步驟:

1、先下載minio服務,因為我服務器是windows,所以下載windows下能用的minio服務exe

下載地址:
https://dl.min.io/server/minio/release/windows-amd64/minio.exe

下載后:啟動服務也很容易,以下命令就啟動服務了,里邊的D:\Files 代表是我服務器的文件夾

minio.exe server D:\Files

啟動好服務后,第一次他會提示讓修改 accesskey 和 secretkey ,於是找到配置文件,config.json 找到原始的 兩個都是minioadmin ,修改成自己的。然后重新啟動下服務。

2、編寫上傳文件的代碼,在vs里引用minio,編寫以下代碼

public async static Task<bool> UploadStreamFile(string bucketName,string objectName, IFormFile formFile,string location= "us-east-1")
        {
            var contentType = formFile.ContentType;
            try
            {
                var minio = new MinioClient(MinioConfig.EndPoint, MinioConfig.AccessKey, MinioConfig.SecretKey);
                //判斷桶(文件夾)是否存在
                bool found = await minio.BucketExistsAsync(bucketName);
                if (!found)
                {
                    //新增桶(文件夾)
                    await minio.MakeBucketAsync(bucketName, location);
                }
                //文件大小
                var len = formFile.Length;
                //打開請求流以讀取上傳的文件
                var stream = formFile.OpenReadStream();
                //上傳文件到桶(文件夾).
                await minio.PutObjectAsync(bucketName, objectName, stream, len, contentType, null, null);
                //返回url
                //var url = await minio.PresignedGetObjectAsync(bucketName, objectName, 3600 * 24 * 7);
                //var data = await minio.StatObjectAsync("picfile", objectName);
                //... 對數據庫進行操作,例如存入文件名與桶(文件夾)的名稱
                return true;
            }
            catch (MinioException ex)
            {
                throw new Exception(ex.Message);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

  

bucketName代表在minio里的文件夾的含義,objectName代表生成的文件名

Endpoint 、AccessKey、 SecretKey啟動好服務器CMD窗口會有顯示

3、如何下載或者用鏈接使用上傳的圖片

如果是臨時查看可以用minio的PresignedGetObjectAsync,如上邊代碼中注釋的部分返回url,但是這個url是有有效期的,超過有效期就不能查看了。不能用來做長期的圖片鏈接引用,想長期用得想別的辦法,minio的客戶端提供的以下方法可以用來修改桶(文件夾)為開放的文件夾,可以直接來引用,方法如下

1)、先下載minio客戶端

下載地址:
https://dl.min.io/client/mc/release/windows-amd64/mc.exe

2)、添加雲存儲服務

mc config host add minio http://192.168.1.51:9000 minioadmin minioadmin --api s3v4

上邊的minioadmin分別代表accesskey 和 secretkey

3)、修改桶策略

mc  policy  set download minio/mypic

mypic代表是桶名稱

這樣就完成了永久鏈接的設置

舉個例子,文件名為 pho.jpg 的文件。訪問的鏈接就是

http://192.168.1.51:9000/mypic/pho.jpg

這樣就能直接得到圖片了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM