diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-17 09:57:09 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-17 09:57:09 +0100 |
| commit | e95cf5c7b6a08eb560763d5167fbddc1c2117bcc (patch) | |
| tree | 2f7815c9f39328fcaced2113de727f63e4837fa3 /src/routes/api/image | |
| parent | 0016aaa197697ec5ff38dfb3f63ac8b6f74b48e0 (diff) | |
add file uploading and multi-threading
Diffstat (limited to 'src/routes/api/image')
| -rw-r--r-- | src/routes/api/image/list.zig | 30 | ||||
| -rw-r--r-- | src/routes/api/image/load.zig | 14 | ||||
| -rw-r--r-- | src/routes/api/image/root.zig | 2 | ||||
| -rw-r--r-- | src/routes/api/image/upload.zig | 4 |
4 files changed, 48 insertions, 2 deletions
diff --git a/src/routes/api/image/list.zig b/src/routes/api/image/list.zig new file mode 100644 index 0000000..ee7a648 --- /dev/null +++ b/src/routes/api/image/list.zig @@ -0,0 +1,30 @@ +const std = @import("std"); +const Context = @import("../../context.zig"); +const Storage = @import("../../../storage/root.zig"); + +pub const access = .users; + +const ImageInfo = struct { + id: []const u8, +}; + +const Result = struct { + images: []ImageInfo, +}; + +pub fn get(ctx: *Context) !Result { + var images: std.ArrayList(ImageInfo) = .empty; + + const images_list = ctx.storage.images.list(); + defer images_list.deinit(); + + for (images_list.images) |*image| { + try images.append(ctx.allocator, .{ + .id = image.id + }); + } + + return .{ + .images = try images.toOwnedSlice(ctx.allocator), + }; +} diff --git a/src/routes/api/image/load.zig b/src/routes/api/image/load.zig new file mode 100644 index 0000000..1bafb11 --- /dev/null +++ b/src/routes/api/image/load.zig @@ -0,0 +1,14 @@ +const std = @import("std"); +const Context = @import("../../context.zig"); +const Storage = @import("../../../storage/root.zig"); + +pub const access = .users; + +pub fn get(ctx: *Context) ![]const u8 { + const id = ctx.request.head.target["/api/image/load/".len..]; + var image = Storage.Image { .id = id }; + var file = try image.file(ctx.storage); + defer file.close(); + + return try file.readToEndAlloc(ctx.allocator, std.math.maxInt(usize)); +} diff --git a/src/routes/api/image/root.zig b/src/routes/api/image/root.zig index 0ad1960..dafa090 100644 --- a/src/routes/api/image/root.zig +++ b/src/routes/api/image/root.zig @@ -1,3 +1,5 @@ const HandlerInfo = @import("../../handler-info.zig"); pub const upload: HandlerInfo = .from_type(@import("upload.zig")); +pub const list: HandlerInfo = .from_type(@import("list.zig")); +pub const load: HandlerInfo = .from_type(@import("load.zig")); diff --git a/src/routes/api/image/upload.zig b/src/routes/api/image/upload.zig index 7cd5cf1..3aa2ea6 100644 --- a/src/routes/api/image/upload.zig +++ b/src/routes/api/image/upload.zig @@ -4,12 +4,12 @@ const Storage = @import("../../../storage/root.zig"); const log = std.log.scoped(.image_upload); -pub const access = .everyone; +pub const access = .users; pub fn post(ctx: *Context) !void { if (ctx.request.head.content_length) |length| { var buffer: [1024]u8 = undefined; const reader = try ctx.request.readerExpectContinue(&buffer); - try Storage.Image.new(ctx.storage, reader, length); + try ctx.storage.images.add(ctx.storage, reader, length); } } |