Thread overview
[vibe.d] showing images
Oct 26, 2016
Nicholas Wilson
Oct 26, 2016
wobbles
Oct 26, 2016
Nicholas Wilson
Oct 26, 2016
Rene Zwanenburg
Oct 27, 2016
Nicholas Wilson
Oct 26, 2016
Karabuta
October 26, 2016
doctype html
html
    body
        -foreach(s; images)
            // it doesn't seem to like #{s} or !{s}
            img(src=s)

----------
shared static this()
{
    auto router = new URLRouter;
    router.registerWebInterface(new CamController);

    auto settings = new HTTPServerSettings;
    settings.port = 8081;
    settings.bindAddresses = ["::1", "127.0.0.1"];
    listenHTTP(settings, router);


}
class Controller
{
    void index(HTTPServerRequest req, HTTPServerResponse res)
    {
        auto images = dirEntries("public/images",SpanMode.breadth)
                        .map!(f=> f.name).array;
        writeln(images); // ["public/images/testprog.jpg"]
        res.render!("index.dt",images);
    }
 }

What am I missing? I just get a 404 for the image.
October 26, 2016
On Wednesday, 26 October 2016 at 12:42:09 UTC, Nicholas Wilson wrote:
> [...]

When you get the 404, do you see the contents of 'writeln(images);' in your terminal?
October 26, 2016
On Wednesday, 26 October 2016 at 12:57:24 UTC, wobbles wrote:
> On Wednesday, 26 October 2016 at 12:42:09 UTC, Nicholas Wilson wrote:
>> [...]
>
> When you get the 404, do you see the contents of 'writeln(images);' in your terminal?

yes.

the 404 is only for the image the page still renders fine, but the image is replaced by the missing image image.
October 26, 2016
On Wednesday, 26 October 2016 at 12:42:09 UTC, Nicholas Wilson wrote:
> doctype html
> html
>     body
>         -foreach(s; images)
>             // it doesn't seem to like #{s} or !{s}
>             img(src=s)
>
> ----------
> shared static this()
> {
>     auto router = new URLRouter;
>     router.registerWebInterface(new CamController);
>
>     auto settings = new HTTPServerSettings;
>     settings.port = 8081;
>     settings.bindAddresses = ["::1", "127.0.0.1"];
>     listenHTTP(settings, router);
>
>
> }
> class Controller
> {
>     void index(HTTPServerRequest req, HTTPServerResponse res)
>     {
>         auto images = dirEntries("public/images",SpanMode.breadth)
>                         .map!(f=> f.name).array;
>         writeln(images); // ["public/images/testprog.jpg"]
>         res.render!("index.dt",images);
>     }
>  }
>
> What am I missing? I just get a 404 for the image.

You need to make the images accessible over HTTP. Note the use of staticFileServer in the following example:

http://vibed.org/docs#http-routing
October 26, 2016
On Wednesday, 26 October 2016 at 12:42:09 UTC, Nicholas Wilson wrote:
> doctype html
> html
>     body
>         -foreach(s; images)
>             // it doesn't seem to like #{s} or !{s}
>             img(src=s)
>
> [...]

Inherit from Web interface?
October 27, 2016
On Wednesday, 26 October 2016 at 18:39:00 UTC, Rene Zwanenburg wrote:
> On Wednesday, 26 October 2016 at 12:42:09 UTC, Nicholas Wilson wrote:
>> [...]
>
> You need to make the images accessible over HTTP. Note the use of staticFileServer in the following example:
>
> http://vibed.org/docs#http-routing

Thanks. I ended up getting rid if the class and using the get and post method on the router.