פתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?
-
@dovid אמר בפתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?:
(אגב למה שמת 'Content-Type': undefined ?, אולי זה הבעיה?)
לא, זה אחד הנסיונות לתקן את הבעיה.
זה הקוד בסרוור
app.post('/xxx/ajax/createNewProject', createNewProject); function createNewProject( req , res ) { 'use strict'; console.log('createNewProject') let body = req.body; console.log( body.data ) console.dir( body )
הלוג:
undefined {}
-
כשאני מדפיס console.log(vm.uploadData.fileObj) זה גם נראה בסדר
File(110866) {name: "חדשושן.docx", lastModified: 1520200202739, lastModifiedDate: Sun Mar 04 2018 23:50:02 GMT+0200 (שעון רגיל ירושלים), webkitRelativePath: "", size: 110866, …} lastModified : 1520200202739 lastModifiedDate : Sun Mar 04 2018 23:50:02 GMT+0200 (שעון רגיל ירושלים) {} name : "חדשושן.docx" size : 110866 type : "application/vnd.openxmlformats-officedocument.wordprocessingml.document" webkitRelativePath : "" __proto__ : File
-
עד עכשיו השתמשתי ב
app.use(express.bodyParser());
אבל עכשיו זה מחזיר שגיאה
Error: invalid json
אז החלפתי לזה:
var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true}));
וגם פה קבלתי שגיאה
PayloadTooLargeError: request entity too large
אין לי כבר כח
-
@אהרן אמר בפתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?:
request entity too large
המלצה שלי להשתמש בmulter עבור העלאת קבצים.
-
@אהרן אמר בפתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?:
@dovid אמר בפתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?:
נסה את המלצתו של @zvizvi.
body מגיע אנדיפיינד
אוף!!במקום אוף תביא קוד. ולמה אתה חושב שהכל מובן מאליו? רק במקרוסופט או אנגולר יש כזו אידליה. בפרימוורקים כמו אקספרס אתה חייב לקחת שליטה על כל דבר שזז.
-
<textarea drop-zone upload-data="vm.uploadData" ng-model="vm.uploadData.text" class="one" placeholder="גררו לכאן את הקובץ הרצוי,
או הדביקו כאן את הטקסט" /> <button ng-click="vm.createNewProject()" > צור פרויקט <span ng-if="vm.uploadData.projectName">"{{vm.uploadData.projectName}}"</span> </button>
.directive('dropZone', ['$http', function($http){ return { scope: { uploadData: '=', }, link: function (scope, element, attrs) { element.bind("drop", function (e) { e.stopPropagation(); e.preventDefault(); let file = e.dataTransfer.files[0]; if (file.name.indexOf('.txt') != -1) scope.uploadData.type = 'txt'; if (file.name.indexOf('.docx') != -1) scope.uploadData.type = 'docx'; if( !scope.uploadData.type ) return alert('לא קובץ docx / txt'); if( scope.uploadData.text ) return alert('יש כבר טקסט') scope.uploadData.fileObj = file; }); element.bind("dragover", function (e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; //console.log('dragover') //console.log(e) }); } }; }]);
function createNewProject () { if( vm.uploadData.text ) vm.uploadData.type = 'text' if( !vm.uploadData.type ) return alert('אין תוכן לפרק') if( !vm.uploadData.projectName ) return alert('אנא הגדר את שם הפרויקט') let upData = false; upData = new FormData(); upData.append('file', vm.uploadData.fileObj); upData.append('file2', 'ddd'); console.log(upData) console.log(vm.uploadData.fileObj) for(let t of upData) {console.log(t)} $http({ method: 'POST', url: 'tchumim/ajax/createNewProject', data: upData, /*headers: { 'Content-Type': undefined} headers: { 'Content-Type': 'application/json; charset=UTF-8' },*/ }).then( function( res ){ }, function(errRes){ serverError(); }); } })
-
צד שרת
const express = require('express'); const app = express(); let multer = require('multer') let upload = multer({ dest: 'uploads/' }) app.post('/tchumim/ajax/createNewProject', upload.single('file'), createNewProject); function createNewProject( req , res ) { 'use strict'; console.log('createNewProject') let body = req.body; console.dir( body ) console.dir( req.file )
-
הקוד (צד שרת) פולט שגיאה כל שהיא? לפי התיעוד שלהם זה אמור לעבוד לך.
העובדה שכתבת { dest: 'uploads/' } גורמת לnulter להניח שישנה כזו תיקיה ולנסות לשמור שם את הקובץ פיזית. ייתכן שאן אין תיקיה הוא יוצר אותה, ייתכן שהוא מתעלם וגם... ייתכן(נ.ב. הקוד שלך לא הכי נעים לקריאה. ההזחות, ונקודה פסיק לא עקביים. ומה הסיבה שאתה תוקע את 'use strict' באמצע פונקציות? אתה לא משתמש בIDE כל שהוא?).
-
@dovid אמר בפתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?:
הקוד (צד שרת) פולט שגיאה כל שהיא? לפי התיעוד שלהם זה אמור לעבוד לך.
שום שגיאה
הפלט
createNewProject
undefined
undefined@dovid אמר בפתיחת אלמנט אינפוט פייל ע"י לחיצה על דיב שממוקם מעליו, אפשרי?:
(נ.ב. הקוד שלך לא הכי נעים לקריאה
ראית פה מישהו שמרט את שערות ראשו ונשאר יפה?
בקשר להזחות, אולי בגלל שזה חלקים מפונציות אחרות?
ובנוגע לנקודה פסיק, דווקא אני מנסה להקפיד ע"ז, חוץ מבקונסול שם אני לא שם, שתהיה לי התראה ואמחוק. -
משהו מתחיל לזוז
החזרתי את
var bodyParser = require('body-parser'); // parse application/json app.use(bodyParser.json({ limit: '50mb' })); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
אבל ראיתי בסטוק שצריך להפוך את הסדר בין השורה השניה לשלישית (פה זה כבר בסדר הנכון)
והוא אכן פירק יפה וה-body אכן מכיל תוכן כולל את הקובץ, מנסה להפוך א"ז למשהו מובן, וגם לבדוק איך זה עובד במקביל לmulter. -
המולטר אכן לא עושה כלום
בבאדי יש מלא מידע בסטרינג ארוך, א"א או קשה לפיענוח.{ '------WebKitFormBoundaryhsVAP9BjmAAZD3na\r\nContent-Disposition: form-data; name': '"file"; filename="aaaa.txt"\r\nContent-Type: text/plain\r\n\r\naharon\r\n------WebKitFormBoundaryhsVAP9BjmAAZD3na\r\nContent-Disposition: form-data; name="file2"\r\n\r\nddd\r\n------WebKitFormBoundaryhsVAP9BjmAAZD3na--\r\n' }