文檔管理平臺上列表顯示了文檔,假如一個文檔有人已經打開了在編輯,而正在編輯的文檔由於未觸發保存機制,所以文檔管理系統裏存在硬盤的文檔是舊的。此時,其他用戶也進入這個管理平臺,想下載這個文件,一般是隻能下載管理平臺系統裏存的文檔。想下載最新的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