Jeg oppdaget en svakhet med Nikitas lagring av filer. I dag synteseres
stien til selve filen basert på andre felter, hvilket vil gi et problem
hvis algoritmen for å syntesere denne stien endres. Jeg er i gang med å
se på å endre denne stien slik at den ikke får '>' som del av filnavnet
når jeg kjører 'import-email --mbox testdata/nikita-noark.mbox', men før
den tid bør det sikres at en ikke får filer uten tilkobling til
databasen.
Jeg foreslår en endring ala endringen under, som introduserer et nytt
databasefelt i dokumentobjekt, lagrer plasseringen i dette feltet etter
opplasting, og bruker dette feltet når en fil deles ut igjen. Merk,
endringen er ikke testet. Det bør sikre at enhver fil lagret på disken
beholder sin kobling i databasen, uavhengig av hvordan fremtidige
filnavn vil endres over tid.
Det kan være interessant å alltid bytte navn på filer på disken når
algoritmen endres, men det vil ha betydelig ytelseskonsekvens med store
arkiv, så jeg tror det kan være mer fornuftig å la gamle filer beholde
sine opprinnelige navn. En ulempe er at det kan føre til uventede
navnekollisjoner hvis en fremtidig plasseringsalgoritme gir samme sti
som en tidligere algoritme for to ikke-identiske filer.
diff --git a/src/main/java/app/domain/noark5/DocumentObject.java b/src/main/java/app/domain/noark5/DocumentObject.java
index 05016c4ba..99420c5f3 100644
--- a/src/main/java/app/domain/noark5/DocumentObject.java
+++ b/src/main/java/app/domain/noark5/DocumentObject.java
@@ -136,6 +136,10 @@ public class DocumentObject
@OneToOne(mappedBy = REFERENCE_DOCUMENT_OBJECT_DB, fetch = LAZY, cascade = ALL)
private ElectronicSignature referenceElectronicSignature;
+ // Location in storage for the file
+ private String storagePath;
+
+
public Integer getVersionNumber() {
return versionNumber;
}
@@ -192,6 +196,14 @@ public class DocumentObject
this.referenceDocumentFile = referenceDocumentFile;
}
+ public String getStoragePath() {
+ return storagePath;
+ }
+
+ public void setStoragePath(String storagepath) {
+ this.storagePath = storagePath;
+ }
+
public String getChecksum() {
return checksum;
}
diff --git a/src/main/java/app/service/noark5/DocumentObjectService.java b/src/main/java/app/service/noark5/DocumentObjectService.java
index 98f33a51f..d38531cce 100644
--- a/src/main/java/app/service/noark5/DocumentObjectService.java
+++ b/src/main/java/app/service/noark5/DocumentObjectService.java
@@ -239,7 +239,7 @@ public class DocumentObjectService
HttpServletResponse response = getResponse();
// First make sure the file exist
try {
- Path file = getToFile(documentObject);
+ Path file = documentObject.getStoragePath();
Resource resource = new UrlResource(file.toUri());
if (!resource.exists() && !resource.isReadable()) {
throw new StorageFileNotFoundException(
@@ -981,6 +981,7 @@ public class DocumentObjectService
Path toFile = getToFile(documentObject);
Files.move(incoming, toFile);
+ documentObject.setStoragePAth(toFile);
}
private void setGeneratedDocumentFilename(DocumentObject documentObject) {
--
Vennlig hilsen
Petter Reinholdtsen