• 6.2 存储文件小问题


    不同的业务存储到不同的桶中

    把新增/删除/查看 方法中新加参数bucketname,有默认值不至于影响前端以前的代码;

                 /// <summary>
            /// 返回图片对象
            /// </summary>
            /// <param name="guid">图片的主键</param>
            /// <returns>图片对象</returns>
            [HttpGet("Show/{guid}")]
            public ActionResult ShowAsync(string guid, string bucketname = "my_bucket")
            {
                try
                {
                    if (!string.IsNullOrEmpty(guid))
                    {
                        _mongodbHostOptions.CollectionName = bucketname;
                        GridFSHelper gridFsHelper = new GridFSHelper(_mongodbHostOptions);
                        var result = gridFsHelper.DownSync(ObjectId.Parse(guid)).Result;
                        if (result != null)
                        {
                            return File(result.ByteImg, "image/jpeg", result.FileName);
                        }
                    }
                }
                catch (Exception e)
                {
                    return Content("No file name provided");
                }
    
                return Content("No file name provided");
            }

    找不到文件时的错误消息提示

    向上面那样提示一个Content return Content("No file name provided");

    根据不同的文件大小存储到不同的表或者筐中

    目前我是缩略图直接保存到表中,主图片不判断大小了直接存储到跟业务相关的桶中,大块头;

    若是要求比较严格,规定小于16M的必须保存到表中,而不是桶中,那么可以做一个判断,分别存储到不同的表或桶中,返回不同的路径,返回的时候把表或桶的名称也带着,前端把这个路径存储到数据库中,下次取的时候也是从数据库中获取;

    批量删除

    这里我是使用循环,多次调用数据库方法,后面更改

    /// <summary>
            ///   批量删除图片
            /// </summary>
            /// <param name="guid">原始图片主键多个guid之间用逗号分割</param>
            /// <returns>执行结果</returns>
            [HttpDelete("BatchDelete/{guid}")]
            public async Task<BaseResult> BatchDelete(string guid, string bucketname = "my_bucket")
            {
                foreach (var uuid in guid.Split(",", StringSplitOptions.RemoveEmptyEntries))
                {
                    _mongodbHostOptions.CollectionName = bucketname;
                    GridFSHelper gridFsHelper = new GridFSHelper(_mongodbHostOptions);
                    await gridFsHelper.DeleteSync(ObjectId.Parse(uuid));//删除mongodb服务器上对应的文件
    
                    await MongodbHelper<Images_Mes>.DeleteAsyncByGuidID(_mongodbHostOptions,
                        uuid + _fspictureOptions.ThumbnailGuidKeys); //删除mongodb服务器上对应的文件
                }
    
                return new BaseResult(ResultCodeAddMsgKeys.CommonObjectSuccessCode,
                    ResultCodeAddMsgKeys.CommonObjectSuccessMsg);
            }
    

    PostMan测试方法:

    http://localhost:5003/api/fsPicture/BatchDelete/5ee2d789bf09a91f58d87955,5ee2d789bf09a91f58d87957?a_strBucketName=newbucket

    如何测试添加图片

    使用PostMan,感觉挺好用的

    如何测试跨域

    这里重复写一遍,我从另外一个博客里面拷贝过来的;

    随便打开一个网站后打开【开发者工具】,里面的【Console】可以直接输入js代码测试:

    输入下面的代码:

    var token= "LtSFVqKxvpS1nPARxS2lpUs2Q2IpGstidMrS8zMhNV3rT7RKnhLN6d2FFirkVEzVIeexgEHgI/PtnynGqjZlyGkJa4+zYIXxtDMoK/N+AB6wtsskYXereH3AR8kWErwIRvx+UOFveH3dgmdw1347SYjbL/ilGKX5xkoZCbfb1f0=,LZkg22zbNsUoHAgAUapeBn541X5OHUK7rLVNHsHWDM/BA4DCIP1f/3Bnu4GAElQU6cds/0fg9Li5cSPHe8pyhr1Ii/TNcUYxqHMf9bHyD6ugwOFTfvlmtp6RDopVrpG24RSjJbWy2kUOOjjk5uv6FUTmbrSTVoBEzAXYKZMM2m4=,R4QeD2psvrTr8tkBTjnnfUBw+YR4di+GToGjWYeR7qZk9hldUVLlZUsEEPWjtBpz+UURVmplIn5WM9Ge29ft5aS4oKDdPlIH8kWNIs9Y3r9TgH3MnSUTGrgayaNniY9Ji5wNZiZ9cE2CFzlxoyuZxOcSVfOxUw70ty0ukLVM/78=";
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://127.0.0.1:8081/thc_bpm/actionLog/test');
    xhr.setRequestHeader("x-access-token",token);
    xhr.send(null);
    xhr.onload = function(e) {
        var xhr = e.target;
        console.log(xhr.responseText);
    }

    没有token验证的可以去掉token设置

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://127.0.0.1:8081/thc_bpm/actionLog/test');
    xhr.send(null);
    xhr.onload = function(e) {
        var xhr = e.target;
        console.log(xhr.responseText);
    }

    输入完后直接按回车键就可以返回结果:

  • 相关阅读:
    24.Spring-Boot-Actuator与Spring-Security整合应用
    Spring Boot 和 Spring 到底有啥区别?用了这么久,你知道吗?
    一文,5 分钟搞明白 MySQL 是如何利用索引的!
    大厂面试必问的Spring全家桶 4 大开源框架,思维脑图全总结,终于出来了
    这些SQL错误用法,如果经常犯,说明你的水平还很low...
    新技能 MyBatis 千万数据表,快速分页!
    牛逼!在IDEA里搞Spring Boot Mybatis反向工程,太爽咯~
    有了 HTTP 协议,为什么还要 RPC 协议,两者有什么区别?
    把 Spring Cloud 给拆了!详解每个组件的作用,值得收藏!
    27个阿里 Java 开源项目,值得收藏!
  • 原文地址:https://www.cnblogs.com/maanshancss/p/13100025.html
Copyright © 2020-2023  润新知