• 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

    这样就能直接得到图片了。

  • 相关阅读:
    微信小程序 如何让button按钮长度变为100%
    使用%在搜索框中进行模糊查询
    vsCode中输入wx没有提示?
    uniapp的页面的生命周期:onLoad、onShow、onReady
    MySQL报错:1130Host 'LAPTOPJRI45NVC' is not allowed to connect to this Mysql server
    URLEncoder和URLDecoder
    super和this
    把MIT的算法课程看一遍
    单节点hadoop部署成功
    suse的ssh服务
  • 原文地址:https://www.cnblogs.com/wcoolly/p/14692526.html
Copyright © 2020-2023  润新知