C#对七牛云的操作

1.配置环境

项目中引用 QiNiu.4.0.dll

在webconfig:
<add key="USER_AGENT" value="qiniu csharp-sdk v6.0.0"/>
<add key="ACCESS_KEY" value=""/>//账号 ---> 密钥AK
<add key="SECRET_KEY" value=""/>//账号 ---> 密钥SK
<add key="RS_HOST" value="http://rs.Qbox.me"/>
<add key="UP_HOST" value="http://up.qiniu.com"/>
<add key="RSF_HOST" value="http://rsf.Qbox.me"/>
<add key="PREFETCH_HOST" value="http://iovip.qbox.me"/>
<add key="API_HOST" value="http://api.qiniu.com"/>

2.创建七牛文件的实体类
  public class QiNiuFile{
            public string fileUrl { get; set; }
            public string fileKey { get; set; }
            public string fileMime { get; set; }
            public string fileThumbnailUrl { get; set; }
        }

3.页 面Html 用的form 提交
<style type="text/css">
    .c-list {
        color: #000;
        margin: 0 0 0 10px;
    }

    .text-none {
        display: none;
    }

    .text-block {
        display: block;
    }

    .td1 {
        background-color: Silver;
    }

    .inputFile
    {
        display:none;
    }

    .opacity
    {
        filter:alpha(opacity=50); /*IE滤镜,透明度50%*/
        -moz-opacity:0.5; /*Firefox私有,透明度50%*/
        opacity:0.5; /*其他,透明度50%*/
    }

    #fileList .file
    {
        margin: 10px;
        width: 80px;
        height: 80px;
        float: left;
    }

     #fileList .file div
    {
       margin-left: auto;
       margin-right: auto;
    }

    #fileList .file .flieKey
    {
        width: 60px;
        height: 60px;
    }

     #fileList .file .flieKey img
    {
        width: 60px;
        height: 60px;
    }

     #fileList .file .fileName
    {
       text-align: center;
    }

    #loadSta
    {
        position:absolute;
        left:0px;
        top:0px;
        width:100%;
        height:100px;
        z-index:99;
        filter:alpha(opacity=50);
        vertical-align:middle;
        text-align:center;
        display:none;
    }
        #loadSta img
        {
            margin-top:200px;
        }

</style>
<form id="filePost" action=""(填写Url) method="post" enctype="multipart/form-data">
            <input type="file" name="file" class="inputFile"/>
            <a class="btn-25 c-red mr10" data-act = "chooseFile">选择文件</a>
            <a class="btn-25 c-red mr10" data-act = "uploadFile">上传文件</a>
            <a class="btn-25 c-red mr10" data-act = "seeFile">查看</a>
            <a class="btn-25 c-red mr10" data-act = "downLoadFile">下载</a>
            <a class="btn-25 c-red mr10" data-act = "deleteFile">删除</a>
            <a class="btn-25 c-red mr10" data-act = "pushFile">推送</a>
</form>
<div id ="fileList"></div>@* 加载七牛云的数据 *@
<div id="loadSta" > @* 上传的效果*@
       <img src="~/Images/uploadfile.gif" />
</div>

4.JS

$(document).ready(function () {
    UploadPushManageMgr.InitPageEvEnt();
    UploadPushManageMgr.InitPageData();
});

var UploadPushManageMgr = {
    fileName : '',

    InitPageEvEnt: function () {
        $('#filePost a[data-act=chooseFile]').on('click', function () {
            $('#filePost .inputFile').click();
        });

        $('#filePost a[data-act=uploadFile]').on('click', function () {
             $("#loadSta").css('display','block');

            $('#filePost').ajaxSubmit({
                success: function (result) {
                    $("#loadSta").css('display', 'none');
                    alert(result);
                    UploadPushManageMgr.InitPageData();
                },
                error: function (ex) {
                    //alert(ex.responseText);
                }
            });
        });

        $("#fileList .file").live('click', function () {
            UploadPushManageMgr.fileName = $(this).attr('name');
            $(this).siblings().addClass('opacity');
            $(this).removeClass('opacity');
        });

        $('#filePost a[data-act=seeFile]').on('click', function () {
            var dataCarrier = new Object();
            dataCarrier.fileName = UploadPushManageMgr.fileName;
            if (dataCarrier.fileName != 0) {
                $.ajax({
                    type: "POST",
                    url: "/GouGouCloudManage/UploadPushManage/SeeFile",
                    data: JSON.stringify(dataCarrier),
                    dataType: "json",
                    contentType: "application/json;charset=utf-8",
                    success: function (result) {
                        window.open(result, '', 'width=500,height=500');
                    },
                    error: function (ex) {
                        //alert(ex.responseText);
                    }
                });
            } else {
                alert("请选择要查看的文件!!!");
            }
        });

        $('#filePost a[data-act=downLoadFile]').on('click', function () {
            var dataCarrier = new Object();
            dataCarrier.fileName = UploadPushManageMgr.fileName;

            try {
                var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息
                var Shell = new ActiveXObject("Shell.Application");
                var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑
                if (Folder != null) {
                    Folder = Folder.items(); // 返回 FolderItems 对象
                    Folder = Folder.item(); // 返回 Folderitem 对象
                    Folder = Folder.Path; // 返回路径
                    if (Folder.charAt(Folder.length - 1) != "\\") {
                        Folder = Folder + "\\";
                    }
                    dataCarrier.filePath = Folder;
                }
            }
            catch (e) {
                alert(e.message);
            }

            if (dataCarrier.fileName != '' && dataCarrier.filePath != '') {
                $.ajax({
                    type: "POST",
                    url: "/GouGouCloudManage/UploadPushManage/DownLoadFile",
                    data: JSON.stringify(dataCarrier),
                    dataType: "json",
                    contentType: "application/json;charset=utf-8",
                    success: function (result) {
                        alert(result);
                    },
                    error: function (ex) {
                        //alert(ex.responseText);
                        alert('//如果提示权限不够 在浏览器中设置一下安全问题 //Internet选项 》 安全 》 受信任的站点 》站点 》 添加当前网站//Internet选项 》 安全 》 自定义级别 》对标记为可安全执行脚本的ActiveX控件执行脚本* 》 启用');
                    }
                });
            } else {
                alert("请选择要下载的文件!!!");
            }
        });

        $('#filePost a[data-act=deleteFile]').on('click', function () {
            var dataCarrier = new Object();
            dataCarrier.fileName = UploadPushManageMgr.fileName;
            if (dataCarrier.fileName != "") {
            var state = confirm("你确定要删除该文件吗?");
            if (state) {
                    $.ajax({
                        type: "POST",
                        url: "/GouGouCloudManage/UploadPushManage/DeleteFile",
                        data: JSON.stringify(dataCarrier),
                        dataType: "json",
                        contentType: "application/json;charset=utf-8",
                        success: function (result) {
                            if (result == 'OK') {
                                alert("删除成功");
                                UploadPushManageMgr.InitPageData();

                            } else {
                                alert("删除失败");
                            }
                        },
                        error: function (ex) {
                            //alert(ex.responseText);
                        }
                    });
                }

            } else {
                alert("请选择你要删除的文件!!!");
            }
        });

        $('#filePost a[data-act=pushFile]').on('click', function () {

            var dataCarrier = new Object();
            dataCarrier.fileName = UploadPushManageMgr.fileName;
            if (dataCarrier.fileName != '') {
                var state = confirm("你确定要推送该文件吗?");
                if (state) {
                    $.ajax({
                        url: "/GouGouCloudManage/UploadPushManage/PushFile",
                        type: "POST",
                        data: JSON.stringify(dataCarrier),
                        dataType: "json",
                        contentType: "application/json;charset=utf-8",
                        success: function (result) {
                            alert(result);
                            //if (result == 'OK') {
                            //    alert("推送成功");
                            //} else {
                            //    alert("删除失败");
                            //}
                        },
                        error: function (ex) {
                            //alert(ex.responseText);
                        }
                    });
                }
            } else {
                alert("请选择要推送的文件!!!");
            }
        })
    },

    InitPageData: function () {
        var dataCarrier = new Object();
        $.ajax({
            type: "POST",
            url: "/GouGouCloudManage/UploadPushManage/InitPageDate",
            data: JSON.stringify(dataCarrier),
            dataType: "json",
            contentType: "application/json;charset=utf-8",
            success: function (result) {
                var fileHtml = "";
                for (var i = 0; i < result.length; i++) {
                    if (result[i].fileMime.indexOf("video") == -1) {
                        fileHtml += "<div class = 'file opacity' name = " + result[i].fileKey + "><div class = 'flieKey'><img src=" + result[i].fileUrl + "></div><div class = 'fileName'>" + result[i].fileKey + "</div></div>";
                    } else {
                        fileHtml += "<div class = 'file opacity' name = " + result[i].fileKey + "><div class = 'flieKey'><img src=" + result[i].fileThumbnailUrl + "></div><div class = 'fileName'>" + result[i].fileKey + "</div></div>";
                    }
                }
                $("#fileList").html(fileHtml);
            },
            error: function (ex) {
                //alert(ex.responseText);
            }
        });
    }
};

5.Controller:

 public class UploadPushManageController : BaseController
    {
        IDeviceManage DevManage = new DeviceManage();
        User user = new User();
        MonitorManage momange = new MonitorManage();
        icm_usercloud usercload = new icm_usercloud();

        /// <summary>
        /// 页面加载
        /// </summary>
        /// <returns></returns>
        public ActionResult ExplorerView()
        {
            // ViewBag.ftp = Request["ftp"] == null ? "" : Request["ftp"];

            icm_usercloud usercloud = momange.GetUserCloudByUserID(user.Uid);
            ViewBag.Size = usercload.SIZE;
            QiNiuHelper.InitQiniu();
            return View();
        }

        #region New 20151230 wyh

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="domain"> 用户七牛的空间[现在默认]</param>
        /// <returns></returns>
        public ActionResult UploadFile(string domain)
        {
            bool isFull = true; //判断用户空间是否已满
            JsonResult result = new JsonResult();
            var file = Request.Files["file"];
            if (Request.Files.Count == 0)
            {
                result.Data = "不能上传空文件";
            }
            else
            {
                if (file.ContentLength > 2097152000)
                {
                    return new JsonResult { Data = "文件超出最大限度" };
                }

                //给用户在数据中添加记录
                //usercload.PID = user.PID;
                //usercload.UID = user.Uid;
                //usercload.SIZE = file.ContentLength;
                //icm_usercloud usercloudOld = momange.GetUserCloudByUserID(user.Uid);

                if (usercloudOld != null)
                {
                    if (usercloudOld.SIZE > 2048000 - usercloudOld.SIZE)
                    {
                        return new JsonResult { Data = "该用户空间不足!!!" };
                    }
                    else
                    {
                        isFull = false;
                        //修改数据中用户的剩余空间
                        //usercload.SIZE = usercloudOld.SIZE + usercload.SIZE;
                        //usercload.UT = DateTime.Now;
                        //momange.UpdateUserCloudByUserID(usercload);
                    }
                }
                else
                {
                    if (file.ContentLength > 2097152000)
                    {
                        return new JsonResult { Data = "该文件已超出上传最大限度!!!" };
                    }
                    else
                    {
                        isFull = false;
                        //在数据库中创建用户
                        //momange.InsertUserCloud(usercload);
                    }
                }

                if (!isFull)
                {
                    bool statis = QiNiuHelper.PutFile(file.FileName, file.InputStream, domain);
                    if (statis)
                    {
                        result.Data = "上传成功";
                    }
                    else
                    {
                        result.Data = "上传失败";
                    }
                }
            }

            return result;
        }

        /// <summary>
        /// 加载用户在七牛所有文件
        /// </summary>
        /// <param name="qiNiuDomain">用户在七牛的空间</param>
        /// <returns></returns>
        public ActionResult InitPageDate(string qiNiuDomain = null)
        {
            Qiniu.Conf.Config.Init();
            JsonResult result = new JsonResult();
            List<DumpItem> qiniufileList = QiNiuHelper.ListFile(qiNiuDomain);
            List<QiNiuFile> fileList = new List<QiNiuFile>();
            foreach (DumpItem item in qiniufileList)
            {
                QiNiuFile file = new QiNiuFile();
                file.fileMime = item.Mime;
                file.fileUrl = QiNiuHelper.GetFileUrl(item.Key, false, qiNiuDomain);
                file.fileKey = item.Key;
                if (item.Mime.Contains("video"))
                {
                    file.fileThumbnailUrl = QiNiuHelper.ThumbnailUrl(file.fileKey);
                }
                fileList.Add(file);
            }
            result.Data = fileList;
            return result;
        }

        /// <summary>
        /// 查看文件
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <returns></returns>
        public ActionResult SeeFile(string fileName, string qiNiuDomain = null)
        {
            string fileUrl = QiNiuHelper.GetFileUrl(fileName, true, qiNiuDomain);
            return new JsonResult()
            {
                Data = fileUrl
            };
        }

        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="filePath">下载到的地址</param>
        /// <returns></returns>
        public ActionResult DownLoadFile(string fileName, string filePath, string qiNiuDomain = null)
        {
            if (string.IsNullOrEmpty(filePath))
            {
                return new JsonResult { Data = "无下载路径!!!" };
            }

            JsonResult result = new JsonResult();
            string remoteUri = QiNiuHelper.GetFileUrl(fileName, false, qiNiuDomain);
            string myStringWebResource = null;
            WebClient myWebClient = new WebClient();
            myStringWebResource = remoteUri + fileName;
            string receivePath = filePath;
            myWebClient.DownloadFile(myStringWebResource, receivePath + fileName);

            result.Data = "下载成功";
            return result;
        }

        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="qiNiuDomain"></param>
        /// <returns></returns>
        public ActionResult DeleteFile(string fileName, string qiNiuDomain = null)
        {
            JsonResult result = new JsonResult();
            bool statis = QiNiuHelper.Delete(fileName, qiNiuDomain);
            if (statis)
            {
                result.Data = "OK";
            }
            return result;
        }

        /// <summary>
        /// 推送文件
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <param name="domainUrl"></param>
        /// <returns></returns>
        public ActionResult PushFile(string fileName, string domainUrl = null)
        {
            //推送的Url
            string fileUrl = QiNiuHelper.GetFileUrl(fileName, true, domainUrl);
            icm_usercloud usercloud = momange.GetUserCloudByUserID(user.Uid);
            //user.Uid;//用户ID
            //usercload.SIZE; //用户的空间

            return new JsonResult()
            {
                Data = fileUrl + "-" + user.Uid + "-" + usercload.SIZE
            };
        }



6.QiNiuHelper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO;
using Qiniu.IO;
using Qiniu.RPC;
using Qiniu.RS;
using Qiniu.RSF;
using Qiniu.IO.Resumable;

namespace ICloudMonitorWebApp.Common.Util
{
    public class QiNiuHelper
    {

        //默认空间
        public const string qiNiuDomain = "dfdf";
        //七牛域名仅供测试使用,推荐绑定自定义域名获得更好的效果。 [默认七牛域名]
        public const string qiNiuDomainUrl = "7xph6u.com1.z0.glb.clouddn.com";

        /// <summary>
        /// 上传本地文件到七牛[普通上传]
        /// </summary>
        /// <param name="key">文件名</param>
        /// <param name="stream">文件流</param>
        /// <param name="domain">用户的七牛空间</param>
        /// <returns></returns>
        public static bool PutFile(string key, Stream stream, string domain = null)
        {
            if (domain == null)
            {
                domain = QiNiuHelper.qiNiuDomain;
            }
            PutPolicy policy = new PutPolicy(domain, 3600);
            string upToken = policy.Token();
            PutExtra extra = new PutExtra();
            IOClient client = new IOClient();
            PutRet ret = client.Put(upToken, key, stream, extra);
            if (ret.OK)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 断点续传
        /// </summary>
        /// <param name="domain">用户的七牛空间</param>
        /// <param name="key">文件key</param>
        /// <param name="fname"></param>
        /// 可以通过注册ResumablePutExtra以下两个事件监听当前上传进度以及成功情况:
        public event EventHandler<PutNotifyEvent> Notify;
        public event EventHandler<PutNotifyErrorEvent> NotifyErr;

        public static void ResumablePutFile(string domain, string key, string fname = null)
        {
            PutPolicy policy = new PutPolicy(domain, 3600);
            string upToken = policy.Token();
            Settings setting = new Settings();
            ResumablePutExtra extra = new ResumablePutExtra();
            // extra.Notify += PutNotifyEvent;//(int blkIdx, int blkSize, BlkputRet ret);//上传进度通知事件
            ResumablePut client = new ResumablePut(setting, extra);
            client.PutFile(upToken, key, Guid.NewGuid().ToString());
        }

        /// <summary>
        /// 列出所有文件信息
        /// </summary>
        /// <param name="qiNiuDomain">用户七牛空间</param>
        public static List<DumpItem> ListFile(string qiNiuDomain)
        {
            if (string.IsNullOrEmpty(qiNiuDomain))
            {
                qiNiuDomain = QiNiuHelper.qiNiuDomain;
            }

            RSFClient rsf = new RSFClient(qiNiuDomain);
            rsf.Limit = int.MaxValue;
            List<DumpItem> list = new List<DumpItem>();
            List<DumpItem> items;
            while ((items = rsf.Next()) != null)
            {
                list.AddRange(items);
            }
            return list;
        }

        /// <summary>
        /// 得到文件的地址{可用于下载,查看}
        /// </summary>
        /// <param name="key">文件名</param>
        /// <param name="isPublic">私有/公开</param>
        /// <param name="domainUrl">空间</param>
        public static string GetFileUrl(string key, bool isPublic = false, string domainUrl = null)
        {
            if (string.IsNullOrEmpty(domainUrl))
            {
                domainUrl = QiNiuHelper.qiNiuDomainUrl;
            }

            //公有链接
            string baseUrl = GetPolicy.MakeBaseUrl(domainUrl, key);
            if (isPublic) return baseUrl;
            //私有链接
            string private_url = GetPolicy.MakeRequest(baseUrl);
            return private_url;
        }

        /// <summary>
        /// 删除单个文件
        /// </summary>
        /// <param name="key">文件名</param>
        /// <param name="domain">文件所在用户的空间名</param>
        public static bool Delete(string key, string qiNiuDomain = null)
        {
            if (string.IsNullOrEmpty(qiNiuDomain))
            {
                qiNiuDomain = QiNiuHelper.qiNiuDomain;
            }
            RSClient client = new RSClient();
            CallRet ret = client.Delete(new EntryPath(qiNiuDomain, key));
            if (ret.OK)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        ///  视屏缩略图
        /// </summary>
        /// <param name="fileKey">视频名</param>
        /// <param name="vframe">输出的目标截图格式,支持jpg、png</param>
        /// <param name="offset">指定截取视频的时刻,单位:秒,精确到毫秒。</param>
        /// <param name="width">缩略图宽度,单位:像素(px),取值范围为1-3840。</param>
        /// <param name="height">缩略图高度,单位:像素(px),取值范围为1-2160。</param>
        /// <param name="rotate">指定顺时针旋转的度数,可取值为90、180、270、auto,默认为不旋转。</param> //默认不旋转[可以选择]
        /// <returns></returns>
        public static string ThumbnailUrl(string fileKey, string vframe = null, string offset = null, string width = null, string height = null, string domain = null)
        {
            //默认
            string thumbnail = "?vframe/jpg/offset/1/w/60/h/60";

            //可以采用传参数的方式
            //string thumbnail = string.Format("?vframe/{0}/offset/{1}/w/{2}/h{3}",vframe,offset,width,height);

            string ThumbnailUrl = GetFileUrl(fileKey, true, domain) + thumbnail;
            return ThumbnailUrl;
        }

        /// <summary>
        /// 初始化七牛,读取webconfig
        /// </summary>
        public static void InitQiniu()
        {
            Qiniu.Conf.Config.Init();
        }

    }
}

转载于:https://www.cnblogs.com/yuhangwang/p/5126682.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值