用ueditor上傳圖片、文件等到七牛雲存儲


ueditor上傳文件,是用數據流的形式上傳的。

而七牛雲存儲官方文檔中,只提供了文件路徑上傳的方式。

但是,僅僅是在官方文檔中寫了這一種方式。

事實上,利用VS的對象管理器,打開Qiniu的dll,我們可以看到以下東西:

其實Qiniu提供的SDK中,是可以利用文件流上傳文件的。

所以,根據官方文檔提供的案例,我們可以將上傳改寫成下面的樣子:

    /// <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(七牛上的空間名)做成了成員變量。

另外的變化就是用Stream代替了原來的文件名。

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

寫好上傳的方法之后,我們打開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會默認的加載你的文件鏈接前面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM