import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
+import javax.activation.FileTypeMap;
+import javax.activation.MimetypesFileTypeMap;
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.Property;
// private ByteBuffer toWrite;
private FileChannel fc = null;
+ private static FileTypeMap fileTypeMap;
+
+ static {
+ try {
+ fileTypeMap = new MimetypesFileTypeMap("/etc/mime.types");
+ } catch (IOException e) {
+ fileTypeMap = FileTypeMap.getDefaultFileTypeMap();
+ }
+ }
+
public BinaryChannel(Node file) throws RepositoryException, IOException {
this.file = file;
// int capacity = 1024 * 1024;
this.binary = data.getSession().getValueFactory().createBinary(in);
}
data.setProperty(Property.JCR_DATA, this.binary);
+
+ // MIME type
+ String mime = fileTypeMap.getContentType(file.getName());
+ data.setProperty(Property.JCR_MIMETYPE, mime);
+
data.getSession().save();
}
} else {
session.save();
open = false;
} catch (RepositoryException e) {
- throw new JcrFsException("Cannot close " + file, e);
+ throw new IOException("Cannot close " + file, e);
} finally {
JcrUtils.closeQuietly(newBinary);
// IOUtils.closeQuietly(fc);
position = position + read;
return read;
} catch (RepositoryException e) {
- throw new JcrFsException("Cannot read into buffer", e);
+ throw new IOException("Cannot read into buffer", e);
}
}
}
try {
return binary.getSize();
} catch (RepositoryException e) {
- throw new JcrFsException("Cannot get size", e);
+ throw new IOException("Cannot get size", e);
}
}
}
}
return fc;
} catch (RepositoryException e) {
- throw new JcrFsException("Cannot get temp file channel", e);
+ throw new IOException("Cannot get temp file channel", e);
}
}