Vertx использует загруженные изображения в html - PullRequest
2 голосов
/ 14 января 2020

Я могу загружать файлы в папку по умолчанию.

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());
    }            
  }

Это файлы, которые я загрузил.

enter image description here


папка file-uploads находится на root моего проекта, она была создана автоматически. Как мне добраться до содержимого этой папки, чтобы показать изображения на моих html страницах?

Это также странно, они не имеют расширения ...

Ответы [ 2 ]

3 голосов
/ 15 января 2020

Vert.x может обслуживать данные c содержимое с помощью обработчика stati c:

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

Обработчик c * stati webroot может быть настроен для указания в каталог загрузки файлов.

Тем не менее, я бы порекомендовал тщательно рассмотреть вопросы безопасности, если вы работаете с общедоступной службой c с личными данными: если вы открываете содержимое этого каталога без какой-либо защиты, злоумышленники могут попробуйте загрузить произвольный контент.

0 голосов
/ 16 января 2020

В дополнение к тому, что сказал пользователь tsegismont, я должен объяснить, что происходит. Я уже использовал статический обработчик, но не правильно.

enter image description here

Это то, что у меня было раньше. Папка resource находится внутри sr c> main> java, и я хотел поместить туда фотографии, но это было невозможно; эта папка скомпилирована, и я должен перезапускать приложение каждый раз, когда происходит загрузка, чтобы увидеть изображения. Не очень хорошая идея.

РЕШЕНИЕ . Я создал папку с именем image-uploads на том же уровне src и затем использовал этот код:

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

И это работает! Когда я звоню https://mywebsite.com/uploads/imgs/something.png vertx попадает в папку загрузки изображений и обслуживает изображения.


Так что если вы хотите загрузить изображения на сервер а затем просматривать их в браузере по ссылке, НЕ загружать файлы в src или подпапках. Сделайте это снаружи sr c. Да, и когда вы загружаете, сделайте это:

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

Таким образом setUploadsDirectory указывает на папку вне sr c, в которую я помещаю данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...