鍍金池/ 問答/Java  C  Linux  HTML/ 前后端分離restful風(fēng)格后端如何傳文件給前端提供導(dǎo)出word功能

前后端分離restful風(fēng)格后端如何傳文件給前端提供導(dǎo)出word功能

后端已經(jīng)實(shí)現(xiàn)了從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)然后生成word的功能,問題是如何讓前端能下載這個(gè)word
而且這個(gè)word是動(dòng)態(tài)生成的,每次訪問得到的數(shù)據(jù)都不一樣。

目前的形式是所有的數(shù)據(jù)都由后端生成json傳給前端

回答
編輯回答
故人嘆

如果生成操作比較耗時(shí),可以通過異步處理, 即把生成的文件以用戶為單位保存成列表,然后在生成功能時(shí)以某種方式,(可以是websocket,也可以是輪詢)等處理完了,彈出文件下載列表。至于服務(wù)器端成的文件,可以通過servlet或者nginx等直接提供下載即可。

2017年9月12日 03:39
編輯回答
墨染殤

給個(gè)提示性思路,我沒有試過。

  1. 是給后端做,后端生成一個(gè)word 文件,前端直接去下載這個(gè)文件就可以了。后端生成word文件技術(shù),網(wǎng)上一艘就有,前端下載文件技術(shù)網(wǎng)上也非常多。
  2. 前端生成word文件,然后導(dǎo)出。前端生成word肯定用插件(自己寫很難),我不知道有沒有這個(gè)插件,得好好找。

建議是第一種方案,技術(shù)都成熟,而且如果word特別大的化,前端抗不住。

2017年5月7日 04:21
編輯回答
胭脂淚

這個(gè)感覺和平常都一樣吧,后臺(tái)根據(jù)數(shù)據(jù)生成Word文件,寫入響應(yīng)中,設(shè)置響應(yīng)頭。

2018年7月23日 23:32
編輯回答
怪痞

這個(gè)問題分兩部分,設(shè)計(jì)實(shí)現(xiàn)。

設(shè)計(jì)上,我覺得有必要講下 RESTful 里很重要的一點(diǎn)

誤區(qū):URL 帶 .json 后綴

我們經(jīng)常設(shè)計(jì)出這樣的接口:

/api/users.json
/api/users/1.json

實(shí)際上這樣是不規(guī)范的。

在 RESTful 風(fēng)格中,URL 只指定訪問的資源,不指定其表現(xiàn)狀態(tài)。

也就是說,我的 /api/users/1 應(yīng)該只表示我想要訪問 id=1User,而不指定服務(wù)端會(huì)返回給我 json 還是別的格式比如 xml。

使用 AcceptContent-Type headers 來(lái)指定資源的表現(xiàn)狀態(tài)。

上述接口規(guī)范的形式應(yīng)該是:

URL: /api/users/1
Headers:
  Accept: application/json

所以,設(shè)計(jì)你要的這個(gè)接口,它的 URL 應(yīng)該和前端請(qǐng)求這份數(shù)據(jù) json 的 URL 相同,而在 header 中指定 Accept 為 word 文檔的 MIME Type。

如果這樣規(guī)范化代價(jià)太大

比如你們的系統(tǒng)已經(jīng)有很多接口,全部改成規(guī)范的很麻煩,那么還有一種差不多 RESTful 的設(shè)計(jì)方案。
設(shè)計(jì)如下接口:

POST /api/xxx/docs

注意要用 POST,原因自己體會(huì)下應(yīng)該能明白。

第二點(diǎn),實(shí)現(xiàn)上,用庫(kù)。

2018年1月22日 18:38