2

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

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 页面中显示图像?

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

4

2 回答 2

3

Vert.x 可以使用静态处理程序提供静态内容:

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

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

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

于 2020-01-15T16:48:50.673 回答
0

除了用户 tsegismont 所说的之外,我还必须解释发生了什么。我已经使用了静态处理程序,但没有以正确的方式使用。

在此处输入图像描述

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

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

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

它有效!当我调用https://mywebsite.com/uploads/imgs/something.png时,vertx 进入 image-uploads 文件夹并提供图像。


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

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

以这种方式setUploadsDirectory指向我放置数据的 src 之外的文件夹。

于 2020-01-16T07:56:23.280 回答