Mercurial
annotate s3/s3_uploader.h @ 207:58d9b64d8dca
Updated deployment script to include sqlite3
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sun, 15 Feb 2026 12:25:50 -0800 |
| parents | 83f16548ba41 |
| children |
| rev | line source |
|---|---|
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #ifndef S3_UPLOADER_H |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 #define S3_UPLOADER_H |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4 /** |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 * S3 Uploader |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 * ----------- |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
7 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 * Generic S3 bucket uploader using AWS Signature Version 4. |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
9 * Built on top of seobeo HTTP client. |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
10 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
11 * ## Examples |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
12 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
13 * ### 1. Upload a file from disk |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
14 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
15 * ```c |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
16 * S3_Config config = { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
17 * .access_key_id = "AKIAIOSFODNN7EXAMPLE", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 * .secret_access_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 * .region = "us-east-1", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
20 * .bucket = "my-bucket" |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
21 * }; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
22 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
23 * S3_Result result = S3_Upload_File(&config, "/path/to/local/file.txt", "uploads/file.txt"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
24 * if (result.success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
25 * { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
26 * printf("Uploaded successfully!\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
27 * } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
28 * else |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
29 * { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
30 * printf("Error: %s\n", result.error_message); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
31 * } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
32 * S3_Result_Destroy(&result); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
33 * ``` |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
34 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
35 * ### 2. Upload raw data from memory |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
36 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
37 * ```c |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
38 * const char *data = "Hello, S3!"; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
39 * S3_Result result = S3_Upload_Data(&config, (const uint8 *)data, strlen(data), |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
40 * "hello.txt", "text/plain"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
41 * S3_Result_Destroy(&result); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
42 * ``` |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
43 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
44 * ### 3. Upload with custom content type |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
45 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
46 * ```c |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
47 * S3_Result result = S3_Upload_File_With_Content_Type(&config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
48 * "/path/to/image.png", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
49 * "images/photo.png", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
50 * "image/png"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
51 * S3_Result_Destroy(&result); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
52 * ``` |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
53 */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
54 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
55 #include <stddef.h> |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
57 #include "dowa/dowa.h" |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
58 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 // S3 configuration |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
60 typedef struct { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
61 const char *access_key_id; // AWS access key ID |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
62 const char *secret_access_key; // AWS secret access key |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
63 const char *region; // AWS region (e.g., "us-east-1") |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 const char *bucket; // S3 bucket name |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
65 const char *endpoint; // Optional custom endpoint (NULL for default AWS) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
66 boolean use_path_style; // Use path-style URLs (bucket in path, not subdomain) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
67 } S3_Config; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
68 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
69 // Upload result |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
70 typedef struct { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
71 boolean success; // TRUE if upload succeeded |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
72 int32 status_code; // HTTP status code |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
73 char *error_message; // Error message (NULL on success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
74 char *etag; // ETag of uploaded object (on success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
75 Dowa_Arena *p_arena; // Internal arena (do not modify) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
76 } S3_Result; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
77 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
78 // --- Core API --- // |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
79 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
80 /* Upload file from disk to S3. Content-Type is auto-detected. */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
81 extern S3_Result S3_Upload_File(const S3_Config *p_config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
82 const char *local_path, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
83 const char *s3_key); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
84 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
85 /* Upload file with explicit content type. */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
86 extern S3_Result S3_Upload_File_With_Content_Type(const S3_Config *p_config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
87 const char *local_path, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
88 const char *s3_key, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
89 const char *content_type); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
90 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
91 /* Upload raw data from memory to S3. */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
92 extern S3_Result S3_Upload_Data(const S3_Config *p_config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
93 const uint8 *data, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
94 size_t data_length, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
95 const char *s3_key, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
96 const char *content_type); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
97 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
98 /* Free resources associated with result. */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
99 extern void S3_Result_Destroy(S3_Result *p_result); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
100 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
101 // --- Presigned URLs --- // |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
102 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
103 // Presigned URL result |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
104 typedef struct { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
105 boolean success; // TRUE if generation succeeded |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
106 char *url; // The presigned URL (on success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
107 char *error_message; // Error message (on failure) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
108 Dowa_Arena *p_arena; // Internal arena (do not modify) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
109 } S3_Presigned_URL; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
110 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
111 /* Generate a presigned URL for uploading (PUT) a file. |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
112 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
113 * The client can use this URL to upload directly to S3 without credentials. |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
114 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
115 * Example: |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
116 * S3_Presigned_URL url = S3_Presign_Put(&config, "uploads/file.txt", "image/png", 3600); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
117 * if (url.success) { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
118 * printf("Upload URL: %s\n", url.url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
119 * // Client does: curl -X PUT -H "Content-Type: image/png" --data-binary @file.png "$URL" |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
120 * } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
121 * S3_Presigned_URL_Destroy(&url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
122 */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
123 extern S3_Presigned_URL S3_Presign_Put(const S3_Config *p_config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
124 const char *s3_key, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
125 const char *content_type, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
126 int32 expires_seconds); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
127 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
128 /* Generate a presigned URL for downloading (GET) a file. |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
129 * |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
130 * Example: |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
131 * S3_Presigned_URL url = S3_Presign_Get(&config, "uploads/file.txt", 3600); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
132 * if (url.success) { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
133 * printf("Download URL: %s\n", url.url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
134 * // Client does: curl "$URL" -o file.txt |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
135 * } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
136 * S3_Presigned_URL_Destroy(&url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
137 */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
138 extern S3_Presigned_URL S3_Presign_Get(const S3_Config *p_config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
139 const char *s3_key, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
140 int32 expires_seconds); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
141 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
142 /* Free resources associated with presigned URL result. */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
143 extern void S3_Presigned_URL_Destroy(S3_Presigned_URL *p_url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
144 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
145 // --- Utility Functions --- // |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
146 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
147 /* Guess content type from file extension. Returns "application/octet-stream" if unknown. */ |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
148 extern const char *S3_Guess_Content_Type(const char *filename); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
149 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
150 #endif |