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测试方法:
如何测试添加图片
使用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);
}
输入完后直接按回车键就可以返回结果:
顶
收藏
关注
评论
作者:王思明
出处:http://www.cnblogs.com/maanshancss/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。所有源码遵循Apache协议,使用必须添加 from maanshancss
出处:http://www.cnblogs.com/maanshancss/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。所有源码遵循Apache协议,使用必须添加 from maanshancss