2012-03-01 2 views
1

Так что я пытаюсь сделать то, что, как я думал, было простым чтением и импортом файла. Так что мой код работает сейчас, так это то, что у меня есть файл, хранящийся в папке на сервере, выберите его и импортируйте. Я выбираю файл через multipartfile:Импорт файла (MultipartFile) и процесс - Java/Grails

<g:form method="post" enctype="multipart/form-data" controller="fileManager"> 
     <label>Company Name:</label><input id="cname" type="text" name="cname" /><br /> 
     <label>Select a CSV file to upload:</label> <input type="file" id="newFile" name="newFile" /> 
     <g:actionSubmit action="importContactsFromFile" value="Import" /> 
    </g:form> 

Так что я хочу сделать, это:

  • Have пользователю выбрать файл
  • Загрузить файл в директорию на сервере (вход/выходной поток?)
  • Прочитайте содержимое файла (CSVReader) и импортировать в БД (это работает)
  • Возможно очистить файл после

Итак, у меня массивная головная боль с этим вторым шагом. Я вытаскиваю файл в переменную def:

def newFile = request.getFile('newFile') 

Как мне преодолеть этот пробел? Захлопнув голову над этим! Благодаря!

ответ

4

вам нужно сохранить файл как промежуточный шаг до разбора его? Большинство парсеров CSV (например, OpenCSV) будут считываться непосредственно с Reader или InputStream. Таким образом, вы можете сделать что-то вроде:

def newFile = request.getFile('newFile') 
def csv = new CSVReader(newFile.inputStream.newReader()) 
... 

Если вы хотите сохранить файл, вы можете использовать метод transferTo:

def newFile = request.getFile('newFile') 
newFile.transferTo(new File('newFile.csv')) 
def csv = new CSVReader(new File('newFile.csv').newReader()) 

В этом случае, вы должны обеспечить две просьбы DON» t перезаписывать друг друга, обеспечивая уникальное имя файла.

Вы можете найти более подробную информацию в руководстве Grails: http://grails.org/doc/latest/guide/theWebLayer.html#6.1.9%20Uploading%20Files

+0

благодарственное ты - у меня есть этот выстрел, и это именно то, что мне нужно (и гораздо менее дорогостоящим в строках кода). – user82302124

1
// Import statement 
import org.springframework.web.multipart.commons.CommonsMultipartFile; 

в методе контроллера:

CommonsMultipartFile f = params['newFile']; 
if (f != null) { 
    BufferedInputStream bis = new BufferedInputStream (f.getInputStream()) 
    // Do whatever you like. 
} 
0

Взгляните на Grails documentation uploadingFiles

Попробуйте это:

def upload() { 
def f = request.getFile('myFile') 
f.transferTo(new File('/some/local/dir/myfile.txt')) 
response.sendError(200, 'Done') 

}

надеюсь, что это помогает

Смежные вопросы