2017-07-27 110 views
0

我正在嘗試增加nodejs服務器中的文件大小限制。在搜索和更改之後,iam仍然得到相同的錯誤。試過在stackoverflow和其他網站上提到的一切,但無法解決問題。我一直在這浪費更多時間。請有人幫我這個錯誤:請求實體太大IN NODE服務器

app.js:

var express = require("express"); 

var Middlewares = require("./config/middlewares/middleware"); 


var bodyParser = require('body-parser'); 

var app = express(); 

var port = parseInt(process.env.PORT, 10) || 5000; 

app.set("port", port); 

app.use(Middlewares.configuration); 

app.listen(port, function() { 
    console.log("Node app is running at localhost:" + port); 
}); 

app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); 

的package.json:

{ 
    "name": "dinely.api", 
    "version": "2.0.0", 
    "description": "", 
    "main": "app.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "dinely", 
    "license": "ISC", 
    "dependencies": { 
    "express": "*", 
    "body-parser": "*", 
    "file-system": "^2.2.2", 
    "jsonwebtoken": "^7.4.1", 
    "jwt-simple": "^0.5.1", 
    "method-override": "*", 
    "mongoose": "*", 
    "passport": "^0.3.2", 
    "passport-jwt": "^2.2.1" 
    } 
} 

前端

HTML:

<div class="column"> 
          <p class="label">Logo<span class="required">*</span></p> 
          <div > 
           <input type="file" name="logo" required (change)="fileChange(input)" #input style="text-indent: 0px;"/> 
           <img [attr.src]='file_srcs' alt="" style="width:15%;margin-top:10px;"/> 
           <div *ngIf="logoValid" class="help-block" style="color:red">Select Image</div> 
          </div> 
         </div> 

component.ts:

fileChange(input) { 
     debugger; 
     this.readFiles(input.files); 

    } 

    readFiles(files) { 

     let reader = new FileReader(); 

     this.readFile(files[0], reader, (result) => { 

       var img = document.createElement("img"); 
       img.src = result; 

       this.fileExtension = files[0].type.replace("image/",""); 

       this.resize(img, 250, 250, (resized_jpeg, before, after) => { 

        this.debug_size_before.push(before); 
        this.debug_size_after.push(after); 
        console.log("before : " + this.debug_size_before + " after : " + this.debug_size_after) 
        this.file_srcs = resized_jpeg; 

        var formdata = new FormData(); 
        formdata.append("formImg",resized_jpeg); 

        console.log(formdata); 

       }); 
      }); 
    } 

    // for image compression 
    resize(img, MAX_WIDTH: number, MAX_HEIGHT: number, callback) { 

    return img.onload =() => { 

     var width = img.width; 
     var height = img.height; 

     if (width > height) { 
      if (width > MAX_WIDTH) { 
       height *= MAX_WIDTH/width; 
       width = MAX_WIDTH; 
      } 
     } else { 
      if (height > MAX_HEIGHT) { 
       width *= MAX_HEIGHT/height; 
       height = MAX_HEIGHT; 
      } 
     } 

     var canvas = document.createElement("canvas"); 

     canvas.width = width; 
     canvas.height = height; 
     var ctx = canvas.getContext("2d"); 
     ctx.drawImage(img, 0, 0, width, height); 

     var dataUrl = canvas.toDataURL('image/' + this.fileExtension); 

     callback(dataUrl, img.src.length, dataUrl.length); 
    }; 
    } 

    readFile(file, reader, callback) { 

     reader.onload =() => { 
      callback(reader.result); 
      this.imageURL = reader.result; 
      this.uploadImgToServer(reader.result); 
     } 

     reader.readAsDataURL(file); 
    } 

    // upload image to server api call 
    uploadImgToServer(url){ 

    return this._dataService.uploadImage({ 

       "imgUrl" : url, 
       "path" : "/images/RestaurantLogos", 
       "name" : this.generateRandomImgName(), 
       "extension" : this.fileExtension 

      }).then(
       data => {   
       console.log("iamge uploaded"); 
       }, 
       error => { 
       }); 
    } 

    // generates random string for image name 
    generateRandomImgName(){ 

    var dt = new Date(); 
    var text = ""; 
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 

    for (var i = 0; i < 5; i++){ 

     text += possible.charAt(Math.floor(Math.random() * possible.length)); 
    } 

    this.imagepath = text; 

    return text; 
    } 
+0

可能重複[錯誤:請求實體太大](https://stackoverflow.com/questions/19917401/error-request-entity-too-large) – Zico

+0

您要發送給服務器?你是怎麼發送它的? – robertklep

+0

這只是2mb文件 – san2706

回答

0

入住這個環節

https://expressjs.com/en/resources/middleware/body-parser.html https://www.npmjs.com/package/bytes

限制

控制最大請求主體大小。如果這是一個數字,那麼該值指定字節數;如果它是一個字符串,則將該值傳遞給字節庫以供解析。默認爲'100kb'。

他們提到的限制值的單位是字節

app.use(bodyParser.json({極限: '50MB'}));

您必須設置以字節爲單位的限制。

+0

這正是他們已經在做的。 – robertklep

+0

我在想的問題是,從前端我發送圖像加密到base64,但身體分析器將無法工作的文件上傳。我不知道我是否正確。 – san2706

+0

@ san2706或許您應該將您的前端代碼添加到您的問題中 – robertklep

相關問題