Creating a folder
You use the HTTP PUT method to create a folder in a bucket. To create a folder, you need write permission for the bucket.
To tell HCP to create a folder instead of an object in response to a PUT request, you can do either these:
- Include a forward slash (/) or the percent-encoded equivalent (%2F) after the folder name in the request.
- Include the
Content-Type
header in the request with a value ofx-directory
.
In either case, you also need to include the Content-Length
header in the request. However, HCP ignores any request body.
When you create a folder, you specify a name for it. The rules for folder names are the same as the rules for object names.
Request line
Depending on whether the bucket name is included in the hostname in the S3 compatible request, a request to create a folder has either of these formats:
- With the bucket name included in the hostname:
PUT /folder-name[(/|%2F)] HTTP/1.1
- With the bucket name following the hostname:
PUT /bucket-name/folder-name[(/|%2F)] HTTP/1.1
Required headers
The list below describes the headers you can use in a request to create a folder.
Authorization
Specifies user credentials or requests anonymous access.
Content-Length
Specifies the size, in bytes, of the data being stored. In a request to create a folder, the value of this header should be
0
(zero).Even if you specify a value greater than zero for this header, no request body is sent to HCP.
Date
Specifies the date and time when the request is being made according to the requester. Normally, this is the current date and time.
The date and time must always be specified using Greenwich Mean Time (GMT).
To specify the date and time, use this format:
DDD, dd MMM yyyy HH:mm:ss (+0000|GMT)
In this format:
DDD
The three-letter abbreviation for the day of the week, with an uppercase first letter (for example, Mon).
dd
The two-digit day of the month.
MMM
The three-letter abbreviation for the month, with an uppercase first letter (for example, Feb).
yyyy
The four-digit year.
HH
The hour on a 24-hour clock.
mm
The number of minutes.
ss
The number of seconds.
For example:
Thu, 23 Mar 2017 14:27:05 +0000
All S3 compatible requests must include either a
Date
header or anx-amz-date
header. If a request includes both headers, HCP uses the date and time in thex-amz-date
header.Host
Specifies the hostname for the request. The host name identifies either a tenant or a bucket.
For a tenant, use this format:
tenant-name.hcp-domain-name
For a bucket, use this format:
bucket-name.tenant-name.hcp-domain-name
x-amz-date
Specifies the date and time at which the request is being made according to the requester. Normally, this is the current date and time.
For the valid values for this header, see the description of the
Date
header above.
Optional headers
Content-Type
Specifies the Internet media type of the request body. The only valid value is
x-directory
.This header is ignored if the folder name in the request ends with a forward slash (/) or the percent-encoded equivalent (%2F). Otherwise, this header is required.
Transfer-Encoding
Specifies the encoding transformation for the request body. The only valid value is
chunked
.Even if you include this header in the request, no request body is sent to HCP.
Response headers
The list below describes the headers returned in response to a successful request to create a folder.
Content-length
Specifies the size, in bytes, of the response body. In response to a successful request to store an object, the value of this header is always
0
(zero).Date
The date and time when HCP responded to the request, in Greenwich Mean Time (GMT). The date and time are returned in this format:
DDD dd MMM yyyy HH:mm:ss GMT
For example:
Fri, 18 Sep 2020 14:27:05 GMT
ETag
Specifies the ETag for the folder.
Even though a folder has no content, HCP returns an ETag for it. However, because folders have no content, all folders have the same ETag.
x-amz-version-id
Specifies the version ID of the object. This header is returned only while versioning is enabled for the bucket.
Return codes
The table below describes HTTP status codes that can be returned in response to a request to create a folder.
Code | Meaning | Description |
200 | OK | HCP successfully created the folder. |
400 | Bad Request | Possible reasons include that the request does not include a Content-Length header. |
403 | Forbidden |
Possible reasons include:
|
404 | Not Found | The specified bucket does not exist. |
409 | Conflict | An object or folder with the specified name already exists. |
500 | Internal Server Error |
An internal error occurred. If this error persists, contact your tenant administrator. |
503 | Service Unavailable |
HCP is temporarily unable to handle the request, probably due to system overload, maintenance, or upgrade. Try the request again, gradually increasing the delay between each successive attempt. If this error persists, contact your tenant administrator. |
Example: Creating a folder
Here’s a sample PUT request that creates a folder named budget_proposals in the r&d folder in the finance bucket. If the r&d folder doesn’t already exist, this request also creates that folder. The request is being made while versioning is enabled for the bucket.
Request with s3curl command line
./s3curl.pl --id=lgreen --put ~ -- -k "https://finance.europe.hcp.example.com/r&d/budget_proposals%2F" -H "Content-Length:0"
Request headers
PUT /r&d/budget_proposals%2F HTTP/1.1 Host: finance.europe.hcp.example.com Transfer-Encoding: chunked Date: Fri, 07 February 2020 17:19:26 +0000 Authorization: AWS bGdyZWVu:VsSmWFRWwTPWPjH+QEs6Z2Qwf84= Content-Length: 0
Response headers
HTTP/1.1 200 OK Date: Fri, 07 February 2020 17:19:26 GMT x-amz-version-id: 87395113368065 ETag: "d41d8cd98f00b204e9800998ecf8427e" Content-Length: 0