说明

上传类主要是涉及上传的
比如文件或者图片
主要涉及的信息有
1.告知服务端存储在哪里
2.有什么规则限定,比如如何裁剪
3.使用哪个接口地址上传

文件上传的返回数据格式为

    /// <summary>
    /// 
    /// </summary>
    public class WangEditorUpload
    {

        /// <summary>
        /// 有几个错误
        /// </summary>
        public int errno { get; set; } = 0;
        /// <summary>
        /// 数据集
        /// </summary>
        public List<WangEditorUploadItem> data { get; set; }

    }
    /// <summary>
    /// 
    /// </summary>
    public class WangEditorUploadItem
    {

        /// <summary>
        /// 
        /// </summary>
        public string url { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string alt { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string href { get; set; }

        /// <summary>
        /// 资源大小
        /// </summary>
        public long size { get; set; }
    }
超级管理员
image

当前特性可以作用于所有的Dto中,具体的样式由前端决定,支持单图和多图模式

字段 类型 示例 说明
args1 数字 1 图片数量
args2 字符 cate 存放在什么位置,上传图片的时候会附带到参数type中,应该就是一个字母!回传给api的参数为type
args3 字符 60*60 图片是否需要压缩,压缩的宽高,比如60*0,回传的参数为size
args4 字符 small small,normal,big表示图片的大小三个规格,默认normal,如果要返回格式,则由dataFrom决定

服务端示例代码可以在案例项目中的UploadController文件中看到

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "data", "view" })]
        public WangEditorUpload UpImage(string type = "head", string size = "")
        {
            var one = new WangEditorUpload();
            one.errno = 1;
            var _month = DateTime.Now.ToString("yyyyMM");
            if (base.Request.Form != null)
            {
                if (base.Request.Form.Files != null)
                {
                    if (base.Request.Form.Files.Count > 0)
                    {
                        one.errno = 0;
                        one.data = new List<WangEditorUploadItem>();
                        for (var k = 0; k < base.Request.Form.Files.Count; k++)
                        {
                            var finput = base.Request.Form.Files[k];
                            //这里还要进行文件后缀的过滤
                            var item = new WangEditorUploadItem();
                            var extension = System.IO.Path.GetExtension(finput.FileName);
                            if (String.IsNullOrEmpty(extension))
                            {
                                extension = ".jpg";
                            }
                            else
                            {
                                if (!extension.StartsWith("."))
                                {
                                    extension = "." + extension;
                                }
                            }
                            if (extension != ".gif")
                            {
                                extension = ".webp";
                            }
                            var filename = $"{finput.FileName}{k}{DateTimeOffset.Now.ToUnixTimeMilliseconds()}".ToMd5Lower();
                            var _char = Path.DirectorySeparatorChar.ToString();
                            var savepath = $"upload/{type}/{_month}/{filename}{extension}";

                            var path = System.IO.Path.GetDirectoryName(savepath);
                            if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); }
                            if (System.IO.File.Exists(savepath)) { System.IO.File.Delete(savepath); }

                            item.alt = finput.FileName;
                            item.href = $"/{savepath}";
                            item.url = $"/{savepath}";
                            if (IsImageExtension(finput.FileName))
                            {
                                var _width = 0;
                                var _height = 0;
                                if (!String.IsNullOrEmpty(size))
                                {
                                    var _sizes = size.Split('*');
                                    int.TryParse(_sizes[0], out _width);
                                    int.TryParse(_sizes[1], out _height);
                                }
                                using var image = Image.Load<Rgba32>(finput.OpenReadStream());
                                if (image.Width > _width && _width != 0)
                                {
                                    image.Mutate(x => x.Resize(_width, _height));
                                }
                                else
                                {
                                    if (image.Height > _height && _height != 0)
                                    {
                                        image.Mutate(x => x.Resize(_width, _height));
                                    }
                                }
                                if (extension == ".webp")
                                {
                                    image.Save(savepath, new WebpEncoder());
                                }
                                else
                                {
                                    image.Save(savepath);
                                }
                                item.url = $"/{savepath}";
                                finput.OpenReadStream().Dispose();
                            }
                            else
                            {
                                using (FileStream fs = new FileStream(savepath, FileMode.Create))
                                {
                                    finput.CopyTo(fs);
                                    fs.Flush();
                                }
                            }
                            item.size = finput.Length;
                            one.data.Add(item);
                        }
                    }
                }
            }
            return one;
        }

默认后端的地址为/api/app/Upload/UpImage

超级管理员
file
字段 类型 示例 说明
args1 字符 /api/app/Upload/UpImage 表示上传的路径,默认是/api/app/Upload/UpFile,你也可以自己修改他,args1或者args3必填其中一个
args2 字符 file datadir
args3 字符 global_upload_file(this); onchange函数
args4 字符 待定 为后续扩展做准备

这个特性的设定是比较灵活的,比如可以使用默认的地址,或者指定地址上传
如果需要自己写逻辑还可以使用args3参数,自己设定function来执行!
args4我感觉可以用于文件后缀的限定
服务端的默认接收文件的代码如下

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        [HttpPost]
        [TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "data", "view" })]
        public WangEditorUpload UpFile(string type = "file")
        {
            var one = new WangEditorUpload();
            one.errno = 1;
            if (base.Request.Form != null)
            {
                if (base.Request.Form.Files != null)
                {
                    if (base.Request.Form.Files.Count > 0)
                    {
                        one.errno = 0;
                        one.data = new List<WangEditorUploadItem>();
                        for (var k = 0; k < base.Request.Form.Files.Count; k++)
                        {
                            var finput = base.Request.Form.Files[k];
                            //这里还要进行文件后缀的过滤
                            var item = new WangEditorUploadItem();
                            var extension = System.IO.Path.GetExtension(finput.FileName);
                            var filename = $"{finput.FileName}{k}{DateTimeOffset.Now.ToUnixTimeMilliseconds()}".ToMd5Lower();
                            var savepath = $"upload/{type}/{filename}.{extension}";
                            var path = System.IO.Path.GetDirectoryName(savepath);
                            if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); }
                            item.alt = finput.FileName;
                            item.href = $"/{savepath}";
                            item.url = $"/{savepath}";
                            using var image = Image.Load<Rgba32>(finput.OpenReadStream());
                            image.Mutate(x => x.Resize(0, 180));
                            image.Save(savepath);
                            item.url = $"/{savepath}";
                            finput.OpenReadStream().Dispose();
                            item.size = finput.Length;
                            one.data.Add(item);
                        }
                    }
                }
            }
            return one;
        }
超级管理员
立即前往参与当前项目管理 说明 image file
贴代码框架
贴代码框架PasteForm的在线文档,主要介绍理念和特性及实际案例!
贴代码文档
什么才叫操作文档?对于操作人员来说,遇到哪个字段不懂意思,点击下即可查阅说明,这就是最好的文档!
PasteSpider在线操作文档
PasteSpider是专门为开发者开发的部署工具,五分钟上手,小内存服务器也可以使用,使用旁载模式,运行更安全!!!目前仅支持linux的服务器,win服务器的版本将在不久到来!
贴代码在线客服文档
是客服系统也是营销系统,支持丰富的话术配置,支持自定义消息格式,支持多站点入驻模式,一键部署快速搭建!