pdf in eine my SQL datenbank speichern
moin moin
kunde möchte in eine bestehende mySQL DB pdf. Dokumente ablegen ( auch Word ).
Geht das?
Wenn ja wie müßte die Spalten Difinition ausschauen das ich diese später auch direkt wieder ( über ein WEB portall ) "downloaden" oder öffnen kann
ich danke Euch
Christian
kunde möchte in eine bestehende mySQL DB pdf. Dokumente ablegen ( auch Word ).
Geht das?
Wenn ja wie müßte die Spalten Difinition ausschauen das ich diese später auch direkt wieder ( über ein WEB portall ) "downloaden" oder öffnen kann
ich danke Euch
Christian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119154
Url: https://administrator.de/contentid/119154
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
9 Kommentare
Neuester Kommentar
Das ist möglich.... In MySQL gibts den Blob-Datentyp ( Blob = Binary Large Object). Using Blob in MySQL(Deutsch)
Da aber eine Datenbank nicht auf Datentransfer ausgelegt (die direkte Bereitstellung ist wesentlich performanter) ist und nur unnötig Leistung für dein Vorhaben nimmt, denke ich wäre es besser nur den Pfad in der Datenbank zu hinterlegen, welcher dann auf die Dateien verweißt.
Ich rate dir hier ausdrücklich davon ab, Blob als "Datentransfermittel" zu verwenden.
Da aber eine Datenbank nicht auf Datentransfer ausgelegt (die direkte Bereitstellung ist wesentlich performanter) ist und nur unnötig Leistung für dein Vorhaben nimmt, denke ich wäre es besser nur den Pfad in der Datenbank zu hinterlegen, welcher dann auf die Dateien verweißt.
Ich rate dir hier ausdrücklich davon ab, Blob als "Datentransfermittel" zu verwenden.
Ich denke das er bereits vorgefertigte PDF-Dateien hat. Aber es gibt genügend Scripte, die aus Seitentexten PDF-Dateien generieren.... dazu müsste der Threaderöffner lediglich googeln ;)
Wenn ich jetzt noch unterstelle das er PHP verwendet, würd ich als Stichwort schon mal " HTML 2 PDF" in den Raum werfen.
Greetz
Wenn ich jetzt noch unterstelle das er PHP verwendet, würd ich als Stichwort schon mal " HTML 2 PDF" in den Raum werfen.
Greetz
Moin spawny2407,
wenn die Anforderung/Konzeptanfrage des Kunden allerdings wirklich ist, PDFs/Dokumente/ irgendwelch "grossen Binär-Datenklumpen" in einer ohnehin bestehenden, vorhandenen (mySQL-)Datenbank zu integrieren, dann möchte ich BCCray vehement widersprechen mit der Variante "Dateinamen/Links in den Tabellen von der DB verwalten lassen ind Dateien vom File/Betriebssystem".
Klingt erst mal einleuchtend und ist in der ersten Vorstellung auch "schneller".
Aber der exponentiell steigende Verwaltungs- und Konsolidierungsaufwand ist NICHT handlebar.
Auf DB-Objekte (Tabellen/Datensätze/Datenfelder) kannst Du differentiert und dokumentierbar mit Rechten und Privilegien festlegen, wer was sehen/bearbeiten/löschen darf.
Bei einer Getrennt-Verarbeitung (Links in den Tabellen/Dateien im Filesystem) muss Du
sprich: jedes PDF, dass auch nur ein Benutzer irgendwo per Link auf den Schirm bekommt, muss er auch Offnen dürfen und es muss vorhanden sein und "neue" PDF, die Du irgendwie ins Filesystem kopierst, müssten eigentlich auch nur dort sein dürfen, wenn sie auch in den Tabellen sind...
---> Bekommst Du nicht ernshaft gebacken.
Es sei denn, wir reden von 5 PDFs und 3 Usern.
Grüße
Biber
wenn die Anforderung/Konzeptanfrage des Kunden allerdings wirklich ist, PDFs/Dokumente/ irgendwelch "grossen Binär-Datenklumpen" in einer ohnehin bestehenden, vorhandenen (mySQL-)Datenbank zu integrieren, dann möchte ich BCCray vehement widersprechen mit der Variante "Dateinamen/Links in den Tabellen von der DB verwalten lassen ind Dateien vom File/Betriebssystem".
Klingt erst mal einleuchtend und ist in der ersten Vorstellung auch "schneller".
Aber der exponentiell steigende Verwaltungs- und Konsolidierungsaufwand ist NICHT handlebar.
Auf DB-Objekte (Tabellen/Datensätze/Datenfelder) kannst Du differentiert und dokumentierbar mit Rechten und Privilegien festlegen, wer was sehen/bearbeiten/löschen darf.
Bei einer Getrennt-Verarbeitung (Links in den Tabellen/Dateien im Filesystem) muss Du
- synchrone, widerspuchsfreie Rechte je User und Datei/Tabellenfeld garantieren (oder starke Nerven haben)
- musst das, was in der DB-Welt "Referentielle Integrität" heißt auf Einzel-Dateiebene nachkaspern.
sprich: jedes PDF, dass auch nur ein Benutzer irgendwo per Link auf den Schirm bekommt, muss er auch Offnen dürfen und es muss vorhanden sein und "neue" PDF, die Du irgendwie ins Filesystem kopierst, müssten eigentlich auch nur dort sein dürfen, wenn sie auch in den Tabellen sind...
---> Bekommst Du nicht ernshaft gebacken.
Es sei denn, wir reden von 5 PDFs und 3 Usern.
Grüße
Biber
Gut, ich hab ja nicht unbedingt gesagt, das es nicht machbar ist bzw. Sinn macht.
Wenn es die Anforderung des Kunden ist, das Binärdaten in einer DB gespeichert werden, dann hast auch nicht recht eine andere Wahl.
spawny2407 gab ja keine weiteren Angaben dazu, es war meiner Auffassung nach eine allgemeine Frage. Und im Allgemeinen Kontext ist es auch nicht nötig, ein (ich nenn es mal Dateitransfersystem) über die Datenbank abzuhandeln.
Gut, die Datenintegrität zu bewahren ist schon ein Aufwand. Dies Problem könnte behoben werden, in dem ein cron oder Script die Daten auf vorhandensein prüft. Die Einträge in die Datenbank lässt sich mittels eines "Einspielen" oder Uploads mit passenden Script bewerkstelligen. Ich finde halt das man für eine primitive Aufgabe hier den DB-Server nicht sinnlos beanspruchen muss, wenn diese Aufgabe http viel schneller und besser bewerkstelligt.
Noch dazu wenn mehrere User gleichzeitig was aus der Datenbank ziehen, dann wirds schon sehr eng mit der Bandbreite.... oder reden wir von 5 PDFs und 3 Usern?
Man muss halt auch immer sehen was sinnvoll ist.
Wenn man Dateien selbst in der Datenbank ablegt, hat dies den Vorteil, dass keine broken links auftreten können, weil ja die Bilder selbst genauso wie die Links auf die Bilder aus der Datenbank erzeugt werden. Liegen die Bilddaten dagegen im Dateisystem und die Datenbank enthält nur Pfadnamen, dann ist es problemlos möglich, dass jemand die Dateien umbenennt, ohne diese Änderung in der Datenbank nachzuführen und umgekehrt. Leider ist es speziell bei MySQL so, dass keinerlei Mechanismen vorhanden sind, die die referentielle Integrität der Datenbank sicherstellen, sodass diese Sicherheit nicht wirklich gegeben ist.
Weiter kann MySQL BLOBsnicht fragmentarisch bearbeiten, d.h. es ist nicht möglich, ein BLOB in kleinen Teilstücken aus der Datenbank zu holen oder den hinteren Teil eines BLOBs zu holen, ohne die Bytes davor zu lesen. Obendrein ist der Sendepuffer von MySQL für BLOBs begrenzt groß, sodass nicht beliebig große BLOBs in der Datenbank abgelegt werden können.
(aber nun denk ich schweifen wir zu sehr vom Thema ab)
Und ein Rechtesystem lässt sich datenbankgestützt auch sehr einfach aufbauen. Noch dazu wenn er sowieso die Daten mittels Webfrontend zur Verfügung stellt. (Hier setze ich ein User-Managment-System o.ä. vorraus)
Auf Basis dieser Berechtigungen kann sehr wohl auch Zugriffs- und Berechtigungssystem umsetzen.
Wenn es die Anforderung des Kunden ist, das Binärdaten in einer DB gespeichert werden, dann hast auch nicht recht eine andere Wahl.
spawny2407 gab ja keine weiteren Angaben dazu, es war meiner Auffassung nach eine allgemeine Frage. Und im Allgemeinen Kontext ist es auch nicht nötig, ein (ich nenn es mal Dateitransfersystem) über die Datenbank abzuhandeln.
Gut, die Datenintegrität zu bewahren ist schon ein Aufwand. Dies Problem könnte behoben werden, in dem ein cron oder Script die Daten auf vorhandensein prüft. Die Einträge in die Datenbank lässt sich mittels eines "Einspielen" oder Uploads mit passenden Script bewerkstelligen. Ich finde halt das man für eine primitive Aufgabe hier den DB-Server nicht sinnlos beanspruchen muss, wenn diese Aufgabe http viel schneller und besser bewerkstelligt.
Noch dazu wenn mehrere User gleichzeitig was aus der Datenbank ziehen, dann wirds schon sehr eng mit der Bandbreite.... oder reden wir von 5 PDFs und 3 Usern?
Man muss halt auch immer sehen was sinnvoll ist.
Wenn man Dateien selbst in der Datenbank ablegt, hat dies den Vorteil, dass keine broken links auftreten können, weil ja die Bilder selbst genauso wie die Links auf die Bilder aus der Datenbank erzeugt werden. Liegen die Bilddaten dagegen im Dateisystem und die Datenbank enthält nur Pfadnamen, dann ist es problemlos möglich, dass jemand die Dateien umbenennt, ohne diese Änderung in der Datenbank nachzuführen und umgekehrt. Leider ist es speziell bei MySQL so, dass keinerlei Mechanismen vorhanden sind, die die referentielle Integrität der Datenbank sicherstellen, sodass diese Sicherheit nicht wirklich gegeben ist.
Weiter kann MySQL BLOBsnicht fragmentarisch bearbeiten, d.h. es ist nicht möglich, ein BLOB in kleinen Teilstücken aus der Datenbank zu holen oder den hinteren Teil eines BLOBs zu holen, ohne die Bytes davor zu lesen. Obendrein ist der Sendepuffer von MySQL für BLOBs begrenzt groß, sodass nicht beliebig große BLOBs in der Datenbank abgelegt werden können.
(aber nun denk ich schweifen wir zu sehr vom Thema ab)
Und ein Rechtesystem lässt sich datenbankgestützt auch sehr einfach aufbauen. Noch dazu wenn er sowieso die Daten mittels Webfrontend zur Verfügung stellt. (Hier setze ich ein User-Managment-System o.ä. vorraus)
Auf Basis dieser Berechtigungen kann sehr wohl auch Zugriffs- und Berechtigungssystem umsetzen.
Moin BCCray,
mein Posting sollte auch kein pauschales Verdammen Deiner Strategie sein - nur eine Gegenrede.
Und wo wir uns sicherlich problemlos zu einem Kompromiss treffen können:
"Es hängt vom konkreten Einzelfall ab."
spawny2407 hat da nicht genug Infos geliefert, um eindeutig pro oder contra argumentieren zu können - es fehlen eben Mengengerüste, Komplexität der Anwendung und auch Sicherheits/Zugriffsbeschränkungsanforderungen sowie die mögliche Verzahnung mit anderen Systemen (woher kommen die Daten /wohin gehen sie?).
Aber ich denke, für einen ersten Argumentsaustausch mit dem Kunden haben wir ihn sensibilisiert.
Grüße
Biber
mein Posting sollte auch kein pauschales Verdammen Deiner Strategie sein - nur eine Gegenrede.
Und wo wir uns sicherlich problemlos zu einem Kompromiss treffen können:
"Es hängt vom konkreten Einzelfall ab."
spawny2407 hat da nicht genug Infos geliefert, um eindeutig pro oder contra argumentieren zu können - es fehlen eben Mengengerüste, Komplexität der Anwendung und auch Sicherheits/Zugriffsbeschränkungsanforderungen sowie die mögliche Verzahnung mit anderen Systemen (woher kommen die Daten /wohin gehen sie?).
Aber ich denke, für einen ersten Argumentsaustausch mit dem Kunden haben wir ihn sensibilisiert.
Grüße
Biber
fullack Ich wollte auch deine Bemerkung nicht in irgendeiner Weiße kritisieren. Ich hab schon solche und solche Lösungen umgesetzt. Hier ist eben eine Fallentscheidung nötig.
Er weiß jetzt, was möglich ist, was die jeweiligen Vor- und Nachteile sind, auf was er achten muss bzw. welche Informationen für die jeweilige Entscheidung wichtig sind.
Grüße
BCC
P.S.: Schönes Wochenende!
Er weiß jetzt, was möglich ist, was die jeweiligen Vor- und Nachteile sind, auf was er achten muss bzw. welche Informationen für die jeweilige Entscheidung wichtig sind.
Grüße
BCC
P.S.: Schönes Wochenende!
Moin spawny2407,
Pfad Datentyp wäre varchar (evtl aufpassen mit den Backslash - escapen)
Am besten du verwendest hier ein Upload-Script, das dir die Daten hochlädt und die ensprechenden Pfade in die DB einträgt.
Such einfach mal nach "Dokumentverwaltung + scripte" - hier gibts eine Menge an bereits existierenden Scripten.
Hier kannst du dir dann etwas "abschauen"
Greetz
Wenn ich nun eine Ordnerstruktur erstelle \Aktenzeichen
XYZ\PDF_xyz.pdf, wie bekomme ich nun den Pfad ( welcher Datentyp)
XYZ\PDF_xyz.pdf, wie bekomme ich nun den Pfad ( welcher Datentyp)
Pfad Datentyp wäre varchar (evtl aufpassen mit den Backslash - escapen)
den Pfad in die DB und die Datei in die Struktur abgelegt. Ist das
alles mit einem INSERT Befehl möglich.
Ja, das wär mit einem Insert möglich.alles mit einem INSERT Befehl möglich.
Am besten du verwendest hier ein Upload-Script, das dir die Daten hochlädt und die ensprechenden Pfade in die DB einträgt.
Such einfach mal nach "Dokumentverwaltung + scripte" - hier gibts eine Menge an bereits existierenden Scripten.
Hier kannst du dir dann etwas "abschauen"
Greetz