Vertx 在 html 中使用上传的图像

Vertx use uploaded images in html

我可以在默认位置上传文件。

router.route().handler(
  BodyHandler.create()
    .setBodyLimit(500 * KB)
);    
router.post("/admin/add").handler(adminActions::createNewItem);

此正文处理程序将文件放入文件上传中。这是上传文件的代码:

public void createNewItem(RoutingContext context) {
    var request = context.request();
    var type = context.request().getFormAttribute("type");

    // other code...    

    for(var f : context.fileUploads()) {
      System.out.println(f.fileName());
    }            
  }

这些是我上传的文件。


file-uploads 文件夹在我项目的根目录下,它是自动创建的。如何访问该文件夹的内容以在我的 html 页面中显示图像?

也很奇怪,他们没有扩展名...

Vert.x 可以 serve static content 使用静态处理程序:

router.route("/static/*").handler(StaticHandler.create());

静态处理程序 webroot 可以配置为指向您的文件上传目录。

但是,如果您正在使用私有数据的 public 服务,我建议您仔细考虑安全性:如果您在没有任何保护的情况下公开此目录的内容,恶意用户可能会尝试下载任意内容。

除了用户 tsegismont 所说的之外,我还必须解释发生了什么。我已经使用了 statichandler 但不是以正确的方式。

这是我以前的。文件夹 resource 在 src > main > java 里面,我想把照片放在那里,但这是不可能的;此文件夹已编译,每次发生上传以查看图片时我都应该重新启动应用程序。不是个好主意。

解决方案。我在 src 的同一级别创建了一个名为 image-uploads 的文件夹,然后我使用了以下代码:

router.route("/uploads/imgs/*").handler(
      StaticHandler.create("image-uploads").setCachingEnabled(false)
);

而且有效!当我调用 https://mywebsite.com/uploads/imgs/something.png vertx 进入图像上传文件夹并提供图像时。


因此,如果您想将图像上传到服务器,然后通过 link 在浏览器中查看它们,请不要上传 src 或子文件夹中的文件。在 src 之外做。哦,当你上传时这样做:

router.route().handler(
  BodyHandler.create()
    .setUploadsDirectory("image-uploads")
    .setBodyLimit(400 * KB)
    .setMergeFormAttributes(true)
);

这样setUploadsDirectory指向我放数据的src外的文件夹