Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

netherblood avatar netherblood 95 Точки

Как се приема едновременно файл и текст от потребител?

Здравейте, сблъсках се с проблем, който не мога да реша от последата лекция и това е да добавя опцията на потребителя да прати файл едновременно с подаването на данни за TODO task.
Знам как да приема файл с multiparty модула, но не знам как едновременно да прочета файла и нужния текст (todo title & todo description), някой може ли да ми даде насоки?

Същия въпрос зададох в stackoverflow, ако искате да го видите там.

https://stackoverflow.com/questions/39894470/how-to-send-and-receive-multipart-data-in-node-js

Ето HTML-a, който ползвам.

http://pastebin.com/W9TVy4An

Тагове:
0
Node.js
KrasiNedew avatar KrasiNedew 65 Точки
Best Answer

След най-външния if (part.filename) сложи else. Реално ти проверяваш това, което получаваш файл ли е (всички файлове си идват с filename), но не правиш нищо ако информацията, която пристига не е файл, а някакъв обект/текст или каквото и да било друго.
Също така пускаш един task за mkdir, но самото записване на файла не го handle-ваш в callback-a а извън него, което може да доведе до проблем от сорта: fs започва да създава директория, преди да е завършилo създаването на директория, втория task writeFile започва да пише във все още не съществуваща директория.
Предполагам виждаш проблема. Можеш или да използваш callback-а, който ти предлага mkdir, или просто да използваш mkdirSync.
Също така получаваш data от part-a в binary encoding, както правилно си го сетнал, но самия файл го записваш с ascii encoding? (промени ascii на binary, иначе файла, който записваш ще бъде corrupted и няма да можеш да го отвориш)

0
07/10/2016 12:45:08
netherblood avatar netherblood 95 Точки

Всъщност имам else, просто не съм го добавил. Мисълта ми е, че като влезе в този else не знам как да достъпя todoTitle. Мога да сложа проверка if (part.name === 'todoname') и то ще влезе, но от там нататък не знам как да достъпя стойността, която е изпратена.

За mkDirSync си абсолютно прав, мерси за което.

Относно ascii-то, това е съвсен отделна тема, понеже с 'binary' и дори 'utf-8' излиза корумпиран файла. Както е показано, save-ването на файл си работи съвсем точно.

0
KrasiNedew avatar KrasiNedew 65 Точки

Като влезе в else-a си логни part-a и виж какво съдържа. Предполагам е обект, с който пристига и value-то на field-овете. А относно binary не може да излиза corrupted. Получаваш данни с binary encoding, следователно ги записваш с binary encoding. Eдинствения вариант за омазване е с file extension-ите, които зависят от това какво set-неш като path на fs (първият параметър, който приема при writeFile).

0
07/10/2016 12:46:27
charlike avatar charlike 114 Точки

Ами, маняк, първо защо ползваш евентите като не си наясно толкова още с нещата?

Сети ли се да console.log-неш `part`, за да видиш освен `.name` и `.filename` какво още има? То е stream, ясно че ще има доста неща.

Показаните example-и в README-то не ти ли стигат за схващане на логиката? Отделно, хубаво - работи с events/streams, но освен `part` ти се emit-ват и `field` / `file` евентите. Погледни пример как съм го handle-нал тук, който пакет ползва `formidable` което е оригиналния код на `multiparty` (multiparty e fork).

Извинете, ако нещо се засягате. Не хейтя и не спамя, опитвам се да насочвам. :)

1
KrasiNedew avatar KrasiNedew 65 Точки

Не бях обърнал внимание за emit-ването на field и file.
Мерси, че ме избави от грозните проверки. :)

0
netherblood avatar netherblood 95 Точки

Ползвам евенти, защото това ми беше показано на курса. Вместо директно да питаш защо, щеше да е някак си по-полезно да ми дадеш алтернатива, която мога да разуча и използвам.

Иначе, естествено, че логнах part преди да пиша тука. 

http://pastebin.com/3bn52LB5 Никъде не намирам value-то, което специално за този request трябва да е "6-2"

Сега забелязох, че има fields в readme-то на multiparty и там се съдържат стойностите, които търся. Благодаря за помощта. :)

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.