github.com/x-oss-byte/git-lfs@v2.5.2+incompatible/docs/api/basic-transfers.md (about) 1 # Basic Transfer API 2 3 The Basic transfer API is a simple, generic API for directly uploading and 4 downloading LFS objects. Git LFS servers can offload object storage to cloud 5 services like S3, or implement this API natively. 6 7 This is the original transfer adapter. All Git LFS clients and servers SHOULD 8 support it, and default to it if the [Batch API](./batch.md) request or response 9 do not specify a `transfer` property. 10 11 ## Downloads 12 13 Downloading an object requires a download `action` object in the Batch API 14 response that looks like this: 15 16 ```json 17 { 18 "transfer": "basic", 19 "objects": [ 20 { 21 "oid": "1111111", 22 "size": 123, 23 "authenticated": true, 24 "actions": { 25 "download": { 26 "href": "https://some-download.com/1111111", 27 "header": { 28 "Authorization": "Basic ..." 29 }, 30 "expires_in": 86400, 31 } 32 } 33 } 34 ] 35 } 36 ``` 37 38 The Basic transfer adapter will make a GET request on the `href`, expecting the 39 raw bytes returned in the HTTP response. 40 41 ``` 42 > GET https://some-download.com/1111111 43 > Authorization: Basic ... 44 < 45 < HTTP/1.1 200 OK 46 < Content-Type: application/octet-stream 47 < Content-Length: 123 48 < 49 < {contents} 50 ``` 51 52 ## Uploads 53 54 The client uploads objects through individual PUT requests. The URL and headers 55 are provided by an upload `action` object. 56 57 ```json 58 { 59 "transfer": "basic", 60 "objects": [ 61 { 62 "oid": "1111111", 63 "size": 123, 64 "authenticated": true, 65 "actions": { 66 "upload": { 67 "href": "https://some-upload.com/1111111", 68 "header": { 69 "Authorization": "Basic ..." 70 }, 71 "expires_in": 86400, 72 } 73 } 74 } 75 ] 76 } 77 ``` 78 79 The Basic transfer adapter will make a PUT request on the `href`, sending the 80 raw bytes returned in the HTTP request. 81 82 ``` 83 > PUT https://some-upload.com/1111111 84 > Authorization: Basic ... 85 > Content-Type: application/octet-stream 86 > Content-Length: 123 87 > 88 > {contents} 89 > 90 < HTTP/1.1 200 OK 91 ``` 92 93 ## Verification 94 95 The Batch API can optionally return a verify `action` object in addition to an 96 upload `action` object. If given, The Batch API expects a POST to the href 97 after a successful upload. 98 99 ```json 100 { 101 "transfer": "basic", 102 "objects": [ 103 { 104 "oid": "1111111", 105 "size": 123, 106 "authenticated": true, 107 "actions": { 108 "upload": { 109 "href": "https://some-upload.com/1111111", 110 "header": { 111 "Authorization": "Basic ..." 112 }, 113 "expires_in": 86400, 114 }, 115 "verify": { 116 "href": "https://some-verify-callback.com", 117 "header": { 118 "Authorization": "Basic ..." 119 }, 120 "expires_in": 86400, 121 } 122 } 123 } 124 ] 125 } 126 ``` 127 128 Git LFS clients send: 129 130 * `oid` - The String OID of the Git LFS object. 131 * `size` - The integer size of the Git LFS object, in bytes. 132 133 ``` 134 > POST https://some-verify-callback.com 135 > Accept: application/vnd.git-lfs+json 136 > Content-Type: application/vnd.git-lfs+json 137 > Content-Length: 123 138 > 139 > {"oid": "{oid}", "size": 10000} 140 > 141 < HTTP/1.1 200 OK 142 ``` 143 144 A 200 response means that the object exists on the server.