Софтуерно Инженерство
Loading...
+ Нов въпрос
netherblood avatar netherblood 94 Точки

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

Здравейте, сблъсках се с проблем, който не мога да реша от последата лекция и това е да добавя опцията на потребителя да прати файл едновременно с подаването на данни за 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 94 Точки

Всъщност имам 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 113 Точки

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

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

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

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

1