簡體   English   中英

node.js如何上傳大用戶輸入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM