Onlyoffice不打開文檔的情況下下載正在編輯的文檔

文檔管理平臺上列表顯示了文檔,假如一個文檔有人已經打開了在編輯,而正在編輯的文檔由於未觸發保存機制,所以文檔管理系統裏存在硬盤的文檔是舊的。此時,其他用戶也進入這個管理平臺,想下載這個文件,一般是隻能下載管理平臺系統裏存的文檔。想下載最新的OO服務器內存中的最新的文件,就要有key,和發送一個請求過去。如下:

根據網友的提示,原理是利用command service功能,發送一個請求給oo服務,oo會立刻自動執行forcesave動作,並將文檔地址等信息發給文檔管理平臺,即callback。

發送command請求是post,json要放到request body中。

{
    "c": "forcesave",
    "key": "Khirz6zTPdfd7",
    "userdata": "sample userdata"
}

 這個請求只會返回如下樣子,error從0~6,對應的情況看官網

{
    "error": 0,
    "key": "Khirz6zTPdfd7"
}

 OO收到這個請求後,會立刻執行forcesave動作了。

要求你的文檔管理平臺要處理這個請求。比如我的:

     } else if callback.Status == 6 && callback.Forcesavetype == 1 || callback.Forcesavetype == 0 {
		//•	6 - document is being edited, but the current document state is saved,
		resp, err := http.Get(callback.Url)
		if err != nil {
			beego.Error(err)
		}
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			beego.Error(err)
		}
		defer resp.Body.Close()
		if err != nil {
			beego.Error(err)
		}

		//強制保存
		f, err := os.Create("./attachment/onlyoffice/" + onlyattachment.FileName)
		if err != nil {
			beego.Error(err)
		}
		defer f.Close()
		_, err = f.Write(body) //這裏直接用resp.Body如何?
		if err != nil {
			beego.Error(err)
		}
		// else {
		//更新文檔_不能更新時間,會造成key失效
		// err = models.UpdateDocTime(onlyattachment.DocId)
		// if err != nil {
		// 	beego.Error(err)
		// }
		// }
		c.Data["json"] = map[string]interface{}{"error": 0}
		c.ServeJSON()
	}

我的git上的engineercms

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章