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會默認的加載你的文件連接前面。