2016-05-03 2 views
-1

Я хочу реализовать загрузку файлов с веб-страницы в базу данных. Мне нужно создать временный файл, который будет использоваться для переноса файла с веб-страницы в базу данных. Я нашел этот пример Java;Удалить файл после загрузки

public void copyFileLocation() throws IOException { 

     File temp = File.createTempFile("temp-file-name", ".tmp"); 

    } 

Есть ли способ удалить файл автоматически после успешной копии? Кроме того, эта платформа кода независима? Мне нужно создать tanpolary файлы на разных платформах в папке tmp.

+1

В принципе, нет необходимости загружать (временный) файл. Можно сразу записать загрузку в базу данных. –

+0

"после успешной копии?" какая копия? Считаете ли вы использование 'File # renameTo'? –

+0

После того, как он будет скопирован, используйте 'File # delete()' – Sanjeev

ответ

0

Храните загруженные данные немедленно в базе данных, предполагая столбец с BLOB типа SQL.

try (PreparedStatement stmt = connection.prepareStatement(
     "INSERT INTO files(blob) VALUES(?)"); 

    // Either: 
    InputStream in = ... uploaded file 
    // or: 
    byte[] data = ... uploaded file contents 
    ByteArrayInputStream in = new ByteArrayInputStream(data); 

    stmt.setBinaryStream(1, in); 
    stmt.executeUpdate(); 
} 

(Есть несколько загружать решения.)

Преимущество меньше лопатой сделано.

+0

Ну, я думал о таком решении, но я не уверен, если я пропущу шаг с файлом на файловой системе и средним буфером памяти (скажем так), правильно, если я ошибаюсь, но память RAM будет используется для хранения временных данных. И если у меня есть файл объемом 2 ГБ на VPS с 1 ГБ ОЗУ, результат будет не очень хорошим. Можете ли вы расширить свой пример, пожалуйста? Не совсем понятно, что я должен использовать InputStream или byte []. –

+0

'byte []' действительно голоден. В общем случае InputStream должен быть возможен. И поскольку JDBC _reads streamed_, нет большого потребления памяти. И как еще один в конце сохранит файл, если не JDBC, таким же образом. ** Сохранение путей к постоянным файлам ** было бы другим решением. Делает резервные копии проще. Можно использовать UUID как имена. –

+0

Спасибо за информацию. –

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