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);
}

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

原文地址:https://www.cnblogs.com/maanshancss/p/13100025.html