用ueditor上传图片、文件等到七牛云存储

ueditor上传文件,是用数据流的形式上传的。json

而七牛云存储官方文档中,只提供了文件路径上传的方式。七牛云存储

可是,仅仅是在官方文档中写了这一种方式。dom

事实上,利用VS的对象管理器,打开Qiniu的dll,咱们能够看到如下东西:url

其实Qiniu提供的SDK中,是能够利用文件流上传文件的。spa

因此,根据官方文档提供的案例,咱们能够将上传改写成下面的样子:code

    /// <summary>
    /// 上传文件
    /// </summary>
    /// <param name="key">保存的文件名</param>
    /// <param name="fileStream">本地文件路径</param>
    public static void PutFile(string key, Stream fileStream)
    {
        var policy = new PutPolicy(bucket, 3600);
        string upToken = policy.Token();
        PutExtra extra = new PutExtra();
        IOClient client = new IOClient();
        client.Put(upToken, key, fileStream, extra);
    }

其实就只修改了PutFile的参数,我将bucket(七牛上的空间名)作成了成员变量。orm

另外的变化就是用Stream代替了原来的文件名。对象

最后的client调用也是使用的上面查看的Put方法。blog

写好上传的方法以后,咱们打开editor的UploadHandler.cs文件,修改其中的部份内容,用文件流上传文件:文档

        //var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
        //var localPath = Server.MapPath(savePath);
        try
        {
            //if (!Directory.Exists(Path.GetDirectoryName(localPath)))
            //{
            //    Directory.CreateDirectory(Path.GetDirectoryName(localPath));
            //}
            //File.WriteAllBytes(localPath, uploadFileBytes);
            Qiniu.Conf.Config.ACCESS_KEY = "****************************************";
            Qiniu.Conf.Config.SECRET_KEY = "****************************************";
            PutFile(uploadFileName, new MemoryStream(uploadFileBytes));
            Result.Url = MakeGetToken(uploadFileName);
            Result.State = UploadState.Success;
        }

注释的部分是ueditor提供的案例代码,咱们建立一个MemoryStream对象,传给PutFile的Stream参数。

这里不能直接使用file.InputStream。

最后的那个MakeGetToken方法,用来生成上传的后的文件路径,也是修改自官方文档。

由于我用的是七牛云的私人空间,因此须要多出这样一个步骤:

    /// <summary>
    /// 获得上传后的文件URL路径。
    /// </summary>
    /// <param name="key">文件名</param>
    /// <returns>带有下载口令的URL路径</returns>
    public static string MakeGetToken(string key)
    {
        string baseUrl = GetPolicy.MakeBaseUrl(domain, key);
        string private_url = GetPolicy.MakeRequest(baseUrl);
        return private_url;
    }

一样的,这里我将domain设置为成员变量。

最后,必定要记得把ueditor中config.json的"imageUrlPrefix"的值设置为空,不然在你上传成功了,在ueditor中也是没法直接查看上传的内容,由于会imageUrlPrefix会默认的加载你的文件连接前面。

相关文章
相关标签/搜索