2012-07-13 4 views
-1

대용량 파일 (~ 2GB)을 업로드하려고합니다. 거대한 파일에서 서버가 충돌하는 것을 막기 위해 Express에서 bodyParser를 제거했습니다. 충돌 오류도 간헐적으로 발생하므로 오류 발생시기와 이유를 선택할 수 없습니다.웹 브라우저에서 치명적인 오류가 발생했습니다.

channel = req.params.channel 
    models.channel.findOne name: channel, (err, show) -> 
    if err then console.log err 
    if show? 
     form = formidable.IncomingForm() 
     files = [] 
     fields = [] 
     form.uploadDir = __dirname + '/../public/videos/resources/' 

     form.on 'field', (field, value) -> 
     #console.log field + ' ' + value 
     fields.push [field,value] 

     form.on 'file', (field, file) -> 
     #console.log file 
     files.push [field, file] 

     form.on 'end', -> 
     for file in files 
      filename = file[1].name.replace /(.*)\//, '' 
      ext = file[1].name.replace /(.*)\./, '' 
      filename = uuid("#{filename}" + Date.now()) + ".#{ext}" 
      fs.renameSync file[1].path, form.uploadDir + filename 
      v = new models.video 
      v.channel_id = channel._id 
      v.title = 'Episode' 
      v.description = '' 
      v.url = filename 

      v.save (err,results) -> 
      if err then console.log err 
      res.send 200 

     form.parse req 
    else 
     res.send 403 

가끔 업로드가 작동하고, 때때로는 다음과 함께 폭탄됩니다 다음과 같이

코드는

은 다른 사람이이 문제를 경험하거나 알고 있습니다

Error: parser error, 0 of 65536 bytes parsed 
    at IncomingForm.write (/Users/brendan/github/node_modules/formidable/lib/incoming_form.js:145:17) 
    at IncomingMessage.<anonymous> (/Users/brendan/github/node_modules/formidable/lib/incoming_form.js:95:12) 
    at IncomingMessage.emit (events.js:67:17) 
    at HTTPParser.parserOnBody [as onBody] (http.js:105:21) 
    at Socket.ondata (http.js:1506:22) 
    at TCP.onread (net.js:374:27) 
무엇 이걸 일으키는거야?

+0

제목 : Formidable은 브라우저에서 * 실행되지 않습니다. –

답변

0

비슷한 오류가 발생했습니다. 내 미들웨어의 db에 대한 비동기 호출로 인해 문제가 발생했습니다. 비동기 호출은 요청 데이터 이벤트에 대한 핸들러가 설정되기 전에 전송됩니다. 이로 인해 데이터가 손실되었습니다.

아마 관련 링크 :

https://github.com/felixge/node-formidable/issues/130

https://github.com/felixge/node-formidable/issues/34

편집

미들웨어

getCategories = (req, res, next) -> 
    data.getCategories (err, results) -> 
    res.locals.categories = results 
    next() 

쿼리

data.getCategories = (callback) -> 
    pg.connect connString, (err, client) -> 
     client.query "SELECT name, slug FROM categories", (err, result) -> 
      callback err, result.rows 
+0

미들웨어 내부의 DB 항목으로 무엇을 했습니까? – Menztrual