Skip to content

Commit

Permalink
Support setting Content-Type when uploading a Zarr entry
Browse files Browse the repository at this point in the history
  • Loading branch information
jwodder committed Feb 5, 2025
1 parent 328f808 commit b3dbe28
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
19 changes: 12 additions & 7 deletions dandiapi/api/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,15 +182,20 @@ def etag_from_blob_name(self, blob_name) -> str | None:
return etag[1:-1]
return etag

def generate_presigned_put_object_url(self, blob_name: str, base64md5: str) -> str:
def generate_presigned_put_object_url(
self, blob_name: str, base64md5: str, content_type: str | None
) -> str:
params = {
'Bucket': self.bucket_name,
'Key': blob_name,
'ACL': 'bucket-owner-full-control',
'ContentMD5': base64md5,
}
if content_type is not None:
params['ContentType'] = content_type
return self.connection.meta.client.generate_presigned_url(
ClientMethod='put_object',
Params={
'Bucket': self.bucket_name,
'Key': blob_name,
'ACL': 'bucket-owner-full-control',
'ContentMD5': base64md5,
},
Params=params,
ExpiresIn=600, # TODO: proper expiration
)

Expand Down
4 changes: 3 additions & 1 deletion dandiapi/zarr/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ def s3_path(self, zarr_path: str) -> str:

def generate_upload_urls(self, path_md5s: list[dict]):
return [
self.storage.generate_presigned_put_object_url(self.s3_path(o['path']), o['base64md5'])
self.storage.generate_presigned_put_object_url(
self.s3_path(o['path']), o['base64md5'], content_type=o['content_type']
)
for o in path_md5s
]

Expand Down
1 change: 1 addition & 0 deletions dandiapi/zarr/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
class ZarrFileCreationSerializer(serializers.Serializer):
path = serializers.CharField()
base64md5 = serializers.CharField()
content_type = serializers.CharField(allow_null=True, default=None)


class ZarrDeleteFileRequestSerializer(serializers.Serializer):
Expand Down

0 comments on commit b3dbe28

Please sign in to comment.