zoukankan      html  css  js  c++  java
  • 记一次上传文件到七牛云存储的经历(Plupload & UEditor)(.net)

    七牛

    配置ACCESS_KEY和SECRET_KEY

    Qiniu.Conf.Config.ACCESS_KEY = "ACCESS_KEY";
    Qiniu.Conf.Config.SECRET_KEY = "SECRET_KEY";
    

    Plupload&七牛

    这个简单,因为七牛的JS SDK就是使用了Plupload 点击查看官方文档

    七牛强烈建议去我们自己的服务器获取token,这里我们使用C# SDK里的教程

    编写获取Token的方法

    /// <summary>
    /// 获取token
    /// <param name="bucket">空间名</param>
    /// </summary>
    public string GetUpToken(string bucket)
    {
        //普通上传,只需要设置上传的空间名就可以了,第二个参数可以设定token过期时间
        var putPolicy = new PutPolicy(bucket);
        //调用Token()方法生成上传的Token
        var upToken = putPolicy.Token();
        return upToken;
    }
    

    UEditor&七牛

    使用UEditor是可以实现客户端直传到七牛的,使用JS SDK重写UEditor的所有上传按钮(参考UEditor官方文档)。

    但是太麻烦了,成本太高,我的项目的瓶颈是在下载而不是在上传,所以我没有实现UEditor直传文件到七牛,而是使用服务器中转文件流到七牛。

    直接上代码:

    编写上传方法

    /// <summary>
    /// 上传
    /// </summary>
    /// <param name="bucket">空间名</param>
    /// <param name="contentStream">流</param>
    /// <param name="key">文件名</param>
    /// <returns></returns>
    public bool Upload(string bucket, Stream contentStream, string key)
    {
        var target = new IOClient();
        var extra = new PutExtra();
        var putPolicy = new PutPolicy(bucket, 3600);
        var upToken = putPolicy.Token();
        var ret = target.Put(upToken, key, contentStream, extra);
        return ret.OK;
    }
    

    修改UEditor的UploadHandler.cs

    在UploadHandler.cs找到以下代码

    var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
    

    并在该行下方添加以下代码

    try
    {
        var key = savePath;//这里使用了UEditor生成的文件名(带路径,可以在ueditor
    etconfig.json中自定义),也可以自己使用代码生成
        using (var memoryStream = new MemoryStream(uploadFileBytes))
        {
            //1.可以实现你项目本身的一些业务,比如将文件信息存入一个单独的附件表
            //2.调用上面的Upload方法
            var bucket = "{你七牛上的空间名称}";
            
            ****.Upload(bucket, memoryStream,key);
        }
        var bucketDomainUrl = "{您七牛上的空间对应的域名,用于下载}";
        Result.Url = bucketDomainUrl + savePath;
        Result.State = UploadState.Success;
    }
    catch (Exception e)
    {
        Result.State = UploadState.FileAccessError;
        Result.ErrorMessage = e.Message;
    }
    

    具体代码的细节和架构相关,可参考自己的项目而定,本人使用ABP(ASP.NET Boilerplate),可轻松实现领域服务和应用服务的注入。

    作者:醉丶千秋
    声明1:除特殊说明外均为原创博客。原创博客转载时请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    声明2:本文排版修改自 tkb至简

  • 相关阅读:
    书单
    将博客搬至CSDN
    《当我谈跑步时,我谈些什么》读后笔记
    jQuery EasyUI 教程-Tabs(选项卡)
    jqGrid中的formatter
    jqGrid中的编辑
    struts2中action接收参数的方法
    Hibernate基础(4):基础配置@Table@Column@Temporal@Transient@Enumerated
    Hibernate @Temporal
    搭建python项目
  • 原文地址:https://www.cnblogs.com/chiakiyu/p/5434867.html
Copyright © 2011-2022 走看看