Old Release

This documentation covers an old version of Fedora. Looking for another version? See all documentation.

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »


When referencing content hosted outside of the repository, you can create an empty binary to act as a placeholder for the external content, specifying the URL of the external content.

Instead of supplying the binary in the body of the request, you provide a Link header which uses the rel="http://fedora.info/definitions/fcrepo#ExternalContent" and specifies where to get the resource and how to handle it.

Link: <http://example.org/some/content>; rel="http://fedora.info/definitions/fcrepo#ExternalContent"; handling="proxy"; type="image/tiff"
Link: <http://example.org/some/content>; rel="http://fedora.info/definitions/fcrepo#ExternalContent"; handling="proxy"; type="image/tiff"


The Fedora API specifies 3 methods of handling external content, all of which are supported.

  1. copy - Copy the binary from the provided URI and then treat it as a normal internal LDP-NR.
  2. redirect - On requests for the LDP-NR provide a redirect (302 Found or 307 Temporary Redirect) to the external URI.
  3. proxy - On requests for the LDP-NR proxy the request through the Fedora server the client with the same interaction as an internally stored LDP-NR.

If you provide a type= parameter to the Link header this content type will be used, however if type= is omitted, then the server attempts to determine the Content-Type.

If the external URI has a file prefix (ie. local disk storage) then application/octet-stream is returned.

If the external URI has a http prefix then a HEAD request is made to the URI provided in the Link header to retrieve the Content-type header, if this header is not returned the resource cannot be added to the repository.


Examples:

Proxying a file on the local server.

Creating the proxy LDP-NR

> curl -i -H"Link: <file:///local/file/storage/wonderful.tiff>; rel=\"http://fedora.info/definitions/fcrepo#ExternalContent\"; handling=\"proxy\"; type=\"image/tiff\"" -XPUT -ufedoraAdmin:fedoraAdmin http://localhost:8080/rest/test_proxy_local_file
HTTP/1.1 201 Created
Date: Fri, 29 Jun 2018 14:15:54 GMT
Set-Cookie: JSESSIONID=aedg7ilmx9zxugi8x9em7l8h;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 28-Jun-2018 14:15:54 GMT
ETag: "0e409de61b53a864ad3a87f4faf884d88cf041ff"
Last-Modified: Fri, 29 Jun 2018 14:15:55 GMT
Link: <http://localhost:8080/rest/test_proxy_local_file/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/test_proxy_local_file"
Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Content-Location: file:/local/file/storage/wonderful.tiff
Link: <http://localhost:8080/rest/test_proxy_local_file/fcr:acl>; rel="acl"
Location: http://localhost:8080/rest/test_proxy_local_file
Content-Type: text/plain
Content-Length: 48
Server: Jetty(9.3.1.v20150714)

http://localhost:8080/rest/test_proxy_local_file

Results of a request

> curl -i http://localhost:8080/rest/test_proxy_local_file -ufedoraAdmin:fedoraAdmin
HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 16:40:48 GMT
Set-Cookie: JSESSIONID=zhy7150ie8vo1bsc9ycb1ghu1;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 28-Jun-2018 16:40:48 GMT
ETag: "0e409de61b53a864ad3a87f4faf884d88cf041ff"
Last-Modified: Fri, 29 Jun 2018 14:15:55 GMT
Content-Type: image/tiff
Accept-Ranges: bytes
Content-Disposition: attachment; filename=""; creation-date="Fri, 29 Jun 2018 14:15:55 GMT"; modification-date="Fri, 29 Jun 2018 14:15:55 GMT"; size=14761236
Link: <http://www.w3.org/ns/ldp#Resource>;rel="type"
Link: <http://www.w3.org/ns/ldp#NonRDFSource>;rel="type"
Link: <http://localhost:8080/rest/test_proxy_local_file/fcr:acl>; rel="acl"
Content-Location: file:/Users/whikloj/Desktop/wonderful.tiff
Link: <http://localhost:8080/rest/test_proxy_local_file/fcr:metadata>; rel="describedby"
Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Accept-External-Content-Handling: copy,redirect,proxy
Allow: DELETE,HEAD,GET,PUT,OPTIONS
Cache-Control: no-transform, must-revalidate, max-age=0
Content-Length: 14761236
Server: Jetty(9.3.1.v20150714)

...<BODY CONTENT>...

Redirect to an external URI

Creating the redirect LDP-NR

> curl -i -H"Link: <http://localhost:8111/wonderful.jp2>; rel=\"http://fedora.info/definitions/fcrepo#ExternalContent\"; handling=\"redirect\"; type=\"image/jp2\"" -XPUT -ufedoraAdmin:fedoraAdmin http://localhost:8080/rest/test_redirect_remote_file
HTTP/1.1 201 Created
Date: Fri, 29 Jun 2018 16:11:16 GMT
Set-Cookie: JSESSIONID=1rv3ytcylpb093ra1mhznx9dp;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 28-Jun-2018 16:11:16 GMT
ETag: "009b79832d68313dd45ca6aab0528b34f9054713"
Last-Modified: Fri, 29 Jun 2018 16:11:16 GMT
Link: <http://localhost:8080/rest/test_redirect_remote_file/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/test_redirect_remote_file"
Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Content-Location: http://localhost:8111/wonderful.jp2
Link: <http://localhost:8080/rest/test_redirect_remote_file/fcr:acl>; rel="acl"
Location: http://localhost:8080/rest/test_redirect_remote_file
Content-Type: text/plain
Content-Length: 52
Server: Jetty(9.3.1.v20150714)

http://localhost:8080/rest/test_redirect_remote_file

Results of a request

> curl -i http://localhost:8080/rest/test_redirect_remote_file -ufedoraAdmin:fedoraAdmin -L
HTTP/1.1 307 Temporary Redirect
Date: Fri, 29 Jun 2018 16:11:59 GMT
Set-Cookie: JSESSIONID=cg9yt3o4whnmmxe9vllwerdz;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 28-Jun-2018 16:11:59 GMT
ETag: "009b79832d68313dd45ca6aab0528b34f9054713"
Last-Modified: Fri, 29 Jun 2018 16:11:16 GMT
Content-Type: image/jp2
Accept-Ranges: bytes
Content-Disposition: attachment; filename=""; creation-date="Fri, 29 Jun 2018 16:11:16 GMT"; modification-date="Fri, 29 Jun 2018 16:11:16 GMT"; size=305517
Link: <http://www.w3.org/ns/ldp#Resource>;rel="type"
Link: <http://www.w3.org/ns/ldp#NonRDFSource>;rel="type"
Link: <http://localhost:8080/rest/test_redirect_remote_file/fcr:acl>; rel="acl"
Content-Location: http://localhost:8111/wonderful.jp2
Link: <http://localhost:8080/rest/test_redirect_remote_file/fcr:metadata>; rel="describedby"
Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Accept-External-Content-Handling: copy,redirect,proxy
Allow: DELETE,HEAD,GET,PUT,OPTIONS
Location: http://localhost:8111/wonderful.jp2
Content-Length: 305517
Server: Jetty(9.3.1.v20150714)

HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 16:12:59 GMT
Server: Apache/2.4.29 (Unix) PHP/7.2.4
Last-Modified: Fri, 29 Jun 2018 16:09:29 GMT
ETag: "4a96d-56fca128f2040"
Accept-Ranges: bytes
Content-Length: 305517

...<BODY CONTENT>...


Copy a remote resource

Create the LDP-NR using external content

> curl -i -H"Link: <http://localhost:8111/wonderful.jp2>; rel=\"http://fedora.info/definitions/fcrepo#ExternalContent\"; handling=\"copy\"; type=\"image/jp2\"" -XPUT -ufedoraAdmin:fedoraAdmin http://localhost:8080/rest/test_copy_remote_file
HTTP/1.1 201 Created
Date: Fri, 29 Jun 2018 16:19:45 GMT
Set-Cookie: JSESSIONID=1hmga57f6q5hh1td785dghsjfh;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 28-Jun-2018 16:19:45 GMT
ETag: "d9cc4f3b266a19f0c225356a5caabb9080d680b4"
Last-Modified: Fri, 29 Jun 2018 16:19:45 GMT
Link: <http://localhost:8080/rest/test_copy_remote_file/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/test_copy_remote_file"
Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Link: <http://localhost:8080/rest/test_copy_remote_file/fcr:acl>; rel="acl"
Location: http://localhost:8080/rest/test_copy_remote_file
Content-Type: text/plain
Content-Length: 48
Server: Jetty(9.3.1.v20150714)

http://localhost:8080/rest/test_copy_remote_file

Results of a request

> curl -i http://localhost:8080/rest/test_copy_remote_file -ufedoraAdmin:fedoraAdmin 
HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 16:39:56 GMT
Set-Cookie: JSESSIONID=h0ywas10h63p1340ajakqp1vy;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 28-Jun-2018 16:39:56 GMT
ETag: "d9cc4f3b266a19f0c225356a5caabb9080d680b4"
Last-Modified: Fri, 29 Jun 2018 16:19:45 GMT
Content-Type: image/jp2
Accept-Ranges: bytes
Content-Disposition: attachment; filename=""; creation-date="Fri, 29 Jun 2018 16:19:45 GMT"; modification-date="Fri, 29 Jun 2018 16:19:45 GMT"; size=305517
Link: <http://www.w3.org/ns/ldp#Resource>;rel="type"
Link: <http://www.w3.org/ns/ldp#NonRDFSource>;rel="type"
Link: <http://localhost:8080/rest/test_copy_remote_file/fcr:acl>; rel="acl"
Link: <http://localhost:8080/rest/test_copy_remote_file/fcr:metadata>; rel="describedby"
Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Accept-External-Content-Handling: copy,redirect,proxy
Allow: DELETE,HEAD,GET,PUT,OPTIONS
Cache-Control: no-transform, must-revalidate, max-age=0
Content-Length: 305517
Server: Jetty(9.3.1.v20150714)

...<BODY CONTENT>...


  • No labels