.net 上传图片存储到七牛云上

本文主要将图片上传到七牛云上,废话不多说直接上代码

1.下载安装七牛云的包

 

2.创建七牛云返回数据实体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GenernalMVC.Common.Upload
{
    public class QiniuModel
    {
        public string key { get; set; }
        public string hash { get; set; }
        public string fsiz { get; set; }
        public string bucket { get; set; }
        public string name { get; set; }
    }
}

3.创建上传工具类

using Qiniu.Http;
using Qiniu.Storage;
using Qiniu.Util;
using System;
using System.Configuration;
using System.Globalization;
using System.IO;
using System.Threading.Tasks;
using System.Web;

namespace GenernalMVC.Common.Upload
{
    /*==================================================================
     *    类名    :    上传图片工具类
     *    功能    :   上传图片到七牛云
     *    作者    :   刘江林
     *    日期    :   20220706
     *    修改记录:
    /*==================================================================*/
    public class UploadImage
    {
        string AccessKey = ConfigurationManager.AppSettings["AccessKey"].ToString();
        string SecretKey = ConfigurationManager.AppSettings["SecretKey"].ToString();
        string QiniuAddress = ConfigurationManager.AppSettings["QiniuAddress"].ToString();
        string bucket = "xdjofficial";//这个是我们在七牛云上创建的“存储空间”名称
        /*****************************************************************************
        * @function name : 通过文件流上传的七牛云,不存本地
        * @author : 刘江林
        * @date : 20220706
        * @inparam : 文件流
        * @outparam : 输出
        * @last change : 最后修改时间
        *****************************************************************************/
        public async Task<string> Upload(HttpPostedFileBase file)
        {
            var newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_fffff", DateTimeFormatInfo.InvariantInfo) + ".jpg";
            string saveKey = "xdjmvc/" + newFileName;
            //string saveKey = "xdjmvc/" + file.FileName; //这个myfile 相当于一个文件夹,是我们只设定的。2.png是我们上传文件的文件名,上传成功后通过它来读
            Mac mac = new Mac(AccessKey, SecretKey); // 生成(上传)凭证时需要使用此Mac
            PutPolicy putPolicy = new PutPolicy();
            // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
            // putPolicy.Scope = bucket + ":" + saveKey;
            putPolicy.Scope = bucket;
            // 上传策略有效期(对应于生成的凭证的有效期)          
            putPolicy.SetExpires(3600);
            // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
            //putPolicy.DeleteAfterDays = 1;
            putPolicy.ReturnBody = "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"fsiz\":$(fsize),\"bucket\":\"$(bucket)\",\"name\":\"$(x:name)\"}";
            // 生成上传凭证                    
            string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString());//token生成
            FormUploader target = new FormUploader(new Config() { Zone = Zone.ZoneCnSouth, UseHttps = true, UseCdnDomains = true, MaxRetryTimes = 3 });
            BucketManager bucketManager = new BucketManager(mac, new Config() { Zone = Zone.ZoneCnSouth, UseHttps = true, UseCdnDomains = true, MaxRetryTimes = 3 });
            await bucketManager.Delete(bucket, saveKey);
            HttpResult result = await target.UploadStream(file.InputStream, saveKey, token,new PutExtra());
            QiniuModel model = new QiniuModel();
            if (result.Code==200)
            {
                model = result.Text.ToObject<QiniuModel>();
            }
            return QiniuAddress + "/"+model.key;
        }
        /*****************************************************************************
        * @function name : 删除七牛云里的图片
        * @author : 刘江林
        * @date : 20220707
        * @inparam : 文件地址 注:这里是七牛云存的地址
        * @outparam : 输出返回编码
        * @last change : 最后修改时间
        *****************************************************************************/
        public async Task<int> Delete(string filePath) 
        {
            string[] sArray = filePath.Split(new string[] { QiniuAddress+"/" }, StringSplitOptions.RemoveEmptyEntries);
            BucketManager bucketManager = new BucketManager(new Mac(AccessKey, SecretKey), new Config());
            HttpResult result = await bucketManager.Delete(bucket, sArray[0]);
            return result.Code;
        }
        /*****************************************************************************
        * @function name : 通过本地地址上传七牛云,存本地
        * @author : 刘江林
        * @date : 20220706
        * @inparam : 文件流 图片本地地址
        * @outparam : 文件在七牛云的地址
        * @last change : 最后修改时间
        *****************************************************************************/
        public async Task<string> Upload(HttpPostedFileBase file,string url) 
        {
            string saveKey = "MyFile/" + file.FileName; 
            Mac mac = new Mac(AccessKey, SecretKey);
            string localFile = url; 
            PutPolicy putPolicy = new PutPolicy();
            // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
            // putPolicy.Scope = bucket + ":" + saveKey;
            putPolicy.Scope = bucket;
            // 上传策略有效期(对应于生成的凭证的有效期)          
            putPolicy.SetExpires(3600);
            // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
            //putPolicy.DeleteAfterDays = 1;
            putPolicy.ReturnBody = "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"fsiz\":$(fsize),\"bucket\":\"$(bucket)\",\"name\":\"$(x:name)\"}";
            // 生成上传凭证                    
            string jstr = putPolicy.ToJsonString();
            string token = Auth.CreateUploadToken(mac, jstr);
            //Config配置类中可以配置区域,比如在我在七牛云上创建的fanin这个存储空间的区域选择的是“华南”这里就将它设为Zone=Zone.ZONE_CN_South 
            //UseHttps表示:是否采用https域名
            //UseCdnDomains表示:上传是否使用CDN上传加速
            //MaxRetryTimes表示:重试请求次数
            UploadManager um = new UploadManager(new Config() { Zone = Zone.ZoneCnSouth, UseHttps = true, UseCdnDomains = true, MaxRetryTimes = 3 });
            HttpResult result = await um.UploadFile(localFile, saveKey, token, new PutExtra());
            QiniuModel model = new QiniuModel();
            if (result.Code == 200)
            {
                model = result.Text.ToObject<QiniuModel>();
            }
            return QiniuAddress + "/" + model.key;
        }
        /*****************************************************************************
        * @function name : 上传到服务器本地
        * @author : 刘江林
        * @date : 20220706
        * @inparam : 文件流,图片存到哪个文件夹
        * @outparam : 输出
        * @last change : 最后修改时间
        *****************************************************************************/
        public string  LocalImage(HttpPostedFileBase files,string url) 
        {
            MemoryStream target = new MemoryStream();
            files.InputStream.CopyTo(target);
            byte[] data1 = target.ToArray();
            if (files == null)
            {//判断是否空提交
            }
            string fileName = files.FileName;//文件名
                                             //获取文件名的后缀,并转为小写
            string extension = Path.GetExtension(fileName).ToLower();
            if (extension.Equals("jpg") || extension.Equals("png"))
            {
            }
            //string name = System.Guid.NewGuid().ToString("N");//32位随机数字作为新文件名
            string serverPath = url;
            //string saveUrl = serverPath + name + extension;//文件存储路径+新文件名+后缀
            string saveUrl = serverPath + fileName;
            files.SaveAs(saveUrl);//保存图片
            return saveUrl;
        }
    }
}

 注意:

        string AccessKey = ConfigurationManager.AppSettings["AccessKey"].ToString();-->这里是七牛云的AccessKey
        string SecretKey = ConfigurationManager.AppSettings["SecretKey"].ToString();-->这里是七牛云的SecretKey
        string QiniuAddress = ConfigurationManager.AppSettings["QiniuAddress"].ToString();-->这里是七牛云存储空间域名
        string bucket = "xdjofficial";//这个是我们在七牛云上创建的“存储空间”名称

4.控制器里使用

 

 /*****************************************************************************
        * @function name : 上传新闻图片
        * @author : 刘江林
        * @date : 20220706
        * @inparam : 文件流
        * @outparam : 输出
        * @last change : 最后修改时间
        *****************************************************************************/
        [HttpPost]
        public async Task<JsonResult> UploadImage(HttpPostedFileBase files) 
        {
            #region 通过本地上传
            //string url= Server.MapPath("/Areas/ContentMnagement/Image/");//服务器图片存储位置
            //UploadImage upload = new UploadImage();
            //string saveurl = upload.LocalImage(files, url);
            #endregion
            UploadImage upload = new UploadImage();
            string url = await upload.Upload(files);
            var result = new { code = 200, msg = "上传成功", data = url.ToString() };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        /*****************************************************************************
        * @function name : layui上传图片接口
        * @author : 刘江林
        * @date : 20220707
        * @inparam : 输入
        * @outparam : 输出
        * @last change : 最后修改时间
        *****************************************************************************/
        [HttpPost]
        public async Task<JsonResult> LayuiUploadImage() 
        {
            UploadImage upload = new UploadImage();
            string url = await upload.Upload(HttpContext.Request.Files[0]);
            var result = "{\"code\": 0,\"msg\": \"成功\",\"data\": {\"src\": \""+url+"\",\"title\": \"" + HttpContext.Request.Files[0].FileName +"\"}}";
            return Json(result, JsonRequestBehavior.AllowGet);
        }

 5.实操

在七牛云上查看

至此图片就上传成功了,刚开始我也走了许多弯路,希望能给初学者提供帮助,谢谢观看!

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值