2016-12-30 1 views
1

Я пытаюсь загрузить файлы в базу данных mysql.Какой тип java соответствует <input type = "file">?

Вот моя форма:

<!DOCTYPE html> 
<html xmlns:th="http://www.themyleaf.org"> 
<head> 
<meta charset="ISO-8859-1" /> 
<title>User</title> 
</head> 
<body> 
    <h1>Please enter the following to upload the file.</h1> 
    <form action="#" th:action="@{/uploadToDB}" th:object="${doc}" method="post"> 
     <p>Author: <input type="text" th:field="*{author}" /></p> 
     <p>Publication date: <input type="text" th:field="*{pubDate}" /></p> 
     <p>Title: <input type="text" th:field="*{title}" /></p> 
     <p>Editor: <input type="text" th:field="*{editor}" /></p> 
     <p>Content type: <input type="text" th:field="*{contentType}" /></p> 
     <p>Size: <input type="text" th:field="*{size}" /></p> 
     <p>Content: <input name="userfile" type="file" id="userfile" th:field="*{content}"></input></p> 
     <input type="hidden" name="MAX_FILE_SIZE" value="2000000"></input> 
     <p><input type="submit" value="Upload" /> <input type="reset" value="Reset" /></p> 
    </form> 
</body> 
</html> 

Эти значения затем установить на мой боб Document:

@SuppressWarnings("serial") 
@Component 
public class Document implements Serializable { 

    private String author; 
    private String pubDate; 
    private String title; 
    private String uploadDate; 
    private String editor; 
    private String id; 
    private String contentType; 
    private String size; 
    private Blob content; 

    //setters and getters 

Теперь проблема я столкнулся, я не знаю, тип подразумеваемой <input type="file">. Он генерирует ошибку, когда я устанавливаю content в Blob, который является типом, который я ищу для вставки в мою базу данных.

Я ранее использовал String, но он не кажется хорошим. Я могу вставить его в мою базу данных. Но я не могу извлечь файл из своей базы данных, чтобы отобразить его или загрузить после него.

Буду признателен за любую помощь!

+3

Попробуйте байт []. После того, как вы прочитаете содержимое в String, вы можете делать то, что хотите. – duffymo

+0

Спасибо. Попробуем это сделать. * – Chuck

+0

Хороший вызов, я могу напрямую использовать 'byte []' и делать это 'PreparedStatement ps = connect.prepareStatement (sql); ps.setBytes (8, d.getContentFromForm()); '. Я думаю, это решит мои проблемы, когда я попытаюсь восстановить файл. Благодарю. – Chuck

ответ

3

@duffymo ответил. Просто используйте byte [].

1

Использование enctype Атрибут в теге формы.

<form action="#" th:action="@{/uploadToDB}" th:object="${doc}" method="post" enctype="multipart/form-data"> 

и использовать byte[] Поскольку база данных как Mysql и Oracle хранит данные мультимедиа в виде двоичного формата. и использует массив byte[] для хранения данных.