Perhaps this is obvious, but the JCR 2.0 specification does not define a way to obtain a URL for a binary object.
But, the procedure to do this is pretty straightforward, though it is highly dependent upon your configuration and your application's use of the disk connector. It also circumvents all JCR-based security mechanisms. As such, proceed with caution.
The disk connector stores all binary values based upon the SHA-1 hash of the contents. The name of the files are the Base-64 encoded value of the SHA-1 hash with ".dat" appended, and these files are stored in the directory given to the connector by the "largeValuePath" property in your configuration. If your configuration does not explicitly set it, the default is the "largeValues" directory inside the "repositoryRootPath" directory that your configuration is required to set. If you can get the SHA-1 of the binary file, you can easily construct a file-based URL for display and use in your application.
Unfortunately, there's no easy way to get this out of the Binary value. (I've logged an enhancement for 2.7 to add to our API a way to get the SHA-1 hash. 2.7, which is due out in a week or so.)
The best way is to for your application to compute it from the content and store it as a property on the parent of the Binary property. For example, if you're using 'nt:file' with an 'nt:resource' node pattern to store your files, you could add the 'mode:hashed' mixin to the 'nt:resource' node and set the 'mode:sha1' property to be the base-64 encoded SHA-1 (see our SecureHash and Base64 classes for how to do this) of the 'jcr:data' Binary property.
The easiest, ugliest and most fragile way to do this is to get the SHA1 of the Binary value from its toString() method, which happens to output the hexadecimal form of the SHA-1 hash. You'd have to parse the toString() result, identify the hex SHA-1, convert that back to a byte, and then convert the byte to a base-64-encoded string. Personally, I'd avoid this approach, as it really isn't that much easier and it is much more fragile than computing it directly from the content as outlined in the previous paragraph.
Hope this helps.
Thank you So much. This helps me lot.
Can you Please Tell me , If i used database connector with Mysql , Then how will it be.
Thank you so much.
1 of 1 people found this helpful
If i used database connector with Mysql , Then how will it be.
The files will be stored within the database (not on the file system), so there's no way to provide a standard URL to your uploaded files. If you need a URL within your application, you might try a custom protocol handler that exposes the content from JCR through the URL mechanism.
Thank you so much helping me.