Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Upload multiple files with Rook

The HTML5 specification allows multiple files to be uploaded at once via <input type="file", ..., multiple="multiple">. Is there a way to take advantage of this with the Rook R package?

Here's my attempt, but it seems to only show one of the selected files:

library(Rook)

app <- function(env) {
  req <- Rook::Request$new(env)
  res <- Rook::Response$new()
  res$write(
   '<html><body>
      Select files:
      <form method="POST" enctype="multipart/form-data">
        <input type="file" name="data" multiple="multiple">
        <input type="submit" name="Upload">
      </form>
    </body></html>')

  if (!is.null(req$POST())){
    data <- req$POST()[['data']]
    res$write("<pre>")
    res$write(paste(capture.output(req$POST(),file=NULL),collapse='\n'))
    res$write("</pre>")
    res$write("<pre>")
    res$write(paste(capture.output(data$filename,file=NULL),collapse='\n'))
    res$write("</pre>")
  }
  res$finish()
}

s <- Rhttpd$new()
s$add(app=RhttpdApp$new(name="app", app=app))
s$start(listen="127.0.0.1", quiet=FALSE)
s$browse(1)

#s$stop(); s$remove(all=TRUE); rm(s)
like image 605
Joshua Ulrich Avatar asked Jun 26 '11 17:06

Joshua Ulrich


1 Answers

The spec isn't supported fully yet; I just tried on Chrome 12.0.742.100 and the browser interface doesn't even allow one to choose multiple files.

To upload multiple files you will want to create multiple input elements like so:

<input type="file" name="file1">...
<input type="file" name="file2">...
...
like image 82
Jeff Avatar answered Oct 06 '22 05:10

Jeff