So speichern Sie die doc -, pdf-und Bild-Dateien in die mysql-Datenbank mit java?
Ich versuche zu speichern .doc
, .pdf
, .txt
- und image-Dateien in meine Datenbank mit Hilfe von hibernate, jsf und mysql.
Habe ich eine Spalte zum speichern der Datei von Typ BLOB. Wenn ich speichern .txt
geben, dann werden die Dateien richtig gespeichert.
Wenn ich versuche zu speichern, die Datei von einem anderen format, dann bin ich immer eine Ausnahme.
In meinem bean habe ich einen Feld-name: byte[] file;
Wie kann ich speichern Sie Sie korrekt und ohne Ausnahmen? Muss ich ändern, mysql-Datentyp für die Spalte, oder verwenden Sie ein anderes Feld für die java-Klasse?
(in Reaktion auf BalusC)
Dies ist der code, die ich benutze für das schreiben in eine Datei. Ich bin mit fileInputStream
und dann speichern Sie die Datei mit hibernate framework.
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
} else {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
byte[] fileInBytes=item.get();
try {
File uploadedFile = new File("/home/db/webApp", fileName);
uploadedFile.createNewFile();
FileInputStream fileInputStream = new FileInputStream(uploadedFile);
//convert file into array of bytes
fileInputStream.read(fileInBytes);
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
UploadedFile object= new UploadedFile();
object.setFile(fileInBytes);
uploadedObject.setFileName(fileName);
session.save(object);
UploadedFile
ist jsf-managed-bean:
public class UploadedFile{
private String fileName;
private byte[] file;
/**
* @return the fileName
*/
public String getFileName() {
return fileName;
}
/**
* @param fileName the fileName to set
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* @return the file
*/
public byte[] getFile() {
return file;
}
/**
* @param file the file to set
*/
public void setFile(byte[] file) {
this.file = file;
}
}
und meine Datenbank-Tabelle hat folgende Struktur:
Create UploadFile(FILE_NAME` VARCHAR(1000) NOT NULL,
`FILE` BLOB NOT NULL);
InformationsquelleAutor prt | 2011-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist besser, Sie speichern die Datei an einem Speicherort
und speichern Sie die Position in der Datenbank
Es hängt davon ab. Stellen Sie sich vor Sie haben ein Soziales Netzwerk und müssen zum speichern von Millionen von Bildern. Würden Sie speichern alle diese Daten in einer Datenbank ?
Warum nicht?
Das ist eine Debatte für sich. Sehen Sie, diese Frage für die vor-und Nachteile. stackoverflow.com/questions/3748/...
Also, warum haben Sie Fragen? Hast du erwartet, mich schlüssig und gut begründet beantworten in einem 600-Zeichen-Kommentar?
InformationsquelleAutor Abi
Dein problem sieht aus wie ein Datentyp Problem. Ein BLOB in MySQL ist nicht sehr groß. Versuchen Sie, Ihre Tabelle der Spalte Datentyp LONGBLOB statt.
InformationsquelleAutor CaMiX
Speichern Sie die Datei meta-Informationen wie Position, in db, aber synchronisieren db-und Datei-system wird ein Thema sein.
InformationsquelleAutor 卢声远 Shengyuan Lu
Es ist ein server-code. Durch diesen code können Sie laden eine Datei, die gespeichert ist in der Datenbank und speichern die Datei auf der server-Seite in (img) Ordner. Mithilfe des Verweis, dass Sie auf die Datei zugreifen kann.
InformationsquelleAutor monica bubna