mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-06-12 09:47:51 +02:00
feat: add onboarding
This commit is contained in:
@@ -49,6 +49,21 @@ impl SyncClient {
|
||||
&self,
|
||||
key: &str,
|
||||
content_type: Option<&str>,
|
||||
) -> SyncResult<PresignUploadResponse> {
|
||||
self
|
||||
.presign_upload_with_metadata(key, content_type, None)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Presign an upload, asking the server to sign `metadata` into the object as
|
||||
/// `x-amz-meta-*`. The response echoes the metadata the server actually signed
|
||||
/// (empty/None on older servers); the caller must send exactly that back on
|
||||
/// the PUT via `upload_bytes_with_metadata`.
|
||||
pub async fn presign_upload_with_metadata(
|
||||
&self,
|
||||
key: &str,
|
||||
content_type: Option<&str>,
|
||||
metadata: Option<std::collections::HashMap<String, String>>,
|
||||
) -> SyncResult<PresignUploadResponse> {
|
||||
let response = self
|
||||
.client
|
||||
@@ -58,6 +73,7 @@ impl SyncClient {
|
||||
key: key.to_string(),
|
||||
content_type: content_type.map(|s| s.to_string()),
|
||||
expires_in: Some(3600),
|
||||
metadata,
|
||||
})
|
||||
.send()
|
||||
.await
|
||||
@@ -186,6 +202,21 @@ impl SyncClient {
|
||||
presigned_url: &str,
|
||||
data: &[u8],
|
||||
content_type: Option<&str>,
|
||||
) -> SyncResult<()> {
|
||||
self
|
||||
.upload_bytes_with_metadata(presigned_url, data, content_type, None)
|
||||
.await
|
||||
}
|
||||
|
||||
/// PUT to a presigned URL, sending `metadata` as `x-amz-meta-*` headers. These
|
||||
/// MUST be exactly the metadata the presign signed (from
|
||||
/// `PresignUploadResponse::metadata`) or S3 rejects the request.
|
||||
pub async fn upload_bytes_with_metadata(
|
||||
&self,
|
||||
presigned_url: &str,
|
||||
data: &[u8],
|
||||
content_type: Option<&str>,
|
||||
metadata: Option<&std::collections::HashMap<String, String>>,
|
||||
) -> SyncResult<()> {
|
||||
let mut req = self
|
||||
.client
|
||||
@@ -197,6 +228,12 @@ impl SyncClient {
|
||||
req = req.header("Content-Type", ct);
|
||||
}
|
||||
|
||||
if let Some(meta) = metadata {
|
||||
for (k, v) in meta {
|
||||
req = req.header(format!("x-amz-meta-{k}"), v);
|
||||
}
|
||||
}
|
||||
|
||||
let response = req
|
||||
.send()
|
||||
.await
|
||||
|
||||
Reference in New Issue
Block a user