[英]node.js How to upload large user Inputs?
任務 :以高性能的方式將從html / vue客戶端輸入的大(!)用戶文本上傳到node.js服務器。
嘗試(當前正在使用)解決方案:
我使用表單輸入(文本區域),然后像這樣發送(簡化):
<form action="/loadWrittenText" method="post">
<textarea type="text" rows="15" id="textbox" name="textInput">
</textarea>
<button>Analyze</button>
</form>
然后像處理普通的發布請求一樣處理它:
router.post('/loadWrittenText', function (req, res) {
wait.launchFiber(postLoadWrittenText, req, res, req);
});
問題 :
如果用戶嘗試輸入大文本,它將首先運行int這個問題: 錯誤:請求實體太大
其次,我想嘗試上傳非常大的文本(至少10.000個字-如果可能的話,整本書)。 在某些時候,我認為一個簡單的發布請求無法完成任務(至少這是我的猜測)。
如果嘗試這樣做,也會遇到大量的RAM使用問題,但這也可能是由其他原因引起的。
我想到的其他解決方案 :
-通常使用某種流,在該流中輸入文本,然后將其流式傳輸到服務器並為塊處理塊。 我找不到一個很好的方法來處理文本輸入。
-使用像這樣的文件上傳器: https : //coligo.io/building-ajax-file-uploader-with-node/ (問題是我仍然會有用戶文本輸入和文件輸入,所以如果用戶決定使用文本輸入並輸入很大的文本,該怎么辦?如果可能的話,我不想扔掉文本輸入)
-踢一下router.post部分,然后用socket.io替換整個內容(盡管我不是socket.io的專業人士,所以需要一點代碼來理解)
內容 :
我正在構建一個語義分析文本的應用程序。 基本上,用戶將輸入文本,然后對其進行分析,保存在數據庫中並發回給用戶。 整個過程都可行,但我需要將其縮放以適應更大的文本,並使其性能更高。
我使用的資源可能對解決方案很重要:
-node.js express-server -express-vue-> vue(前端)-wait.for(那就是為什么wait.launchFiber
行)
與其發送<textarea>
值, <textarea>
嘗試使用<input type="file">
並將文件內容直接流式傳輸到服務器。
https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file
如果您需要有關節點流的幫助,這是一個很好的資源:
https://medium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c9141306be93
嘗試以下代碼段。
app.use(express.bodyParser({limit: '50mb'}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.