Создать ссылку для загрузки файла статического ресурса - PullRequest
0 голосов
/ 25 апреля 2018

Я бы хотел разместить ссылку на скачивание на моем сайте, чтобы пользователи могли загрузить файл template.csv.Файл статичен и находится в корне моей папки /grails-app/assets.

Внутри моей page.gsp я пробовал 2 способа сделать это, но безрезультатно:

  • <a href="assets/template.csv" download="template.csv">Download the template</a>
    • это приводит к загрузке файла template.csv, но содержимое является HTML-кодом page.gsp, а не исходным содержимым файла, который я загрузил в мои активы.
  • <a href="${assetPath(src: "template.csv", absolute: true)}" download="template.csv">Download the template</a>
    • созданный html-файл имеет ссылку на localhost:8080/mysite/assets/template.csv, но при щелчке на нем появляется сообщение об ошибке: Failed - no file.

Как правильно делать то, чего я хочу достичь?Есть ли проблема с дополнительными разрешениями, которые мне нужно добавить, чтобы разрешить загрузку моего файла?

Наше веб-приложение использует довольно старый технологический стек:

  • Grails 2.3.4
  • Плагин asset-pipe-2.2.5

1 Ответ

0 голосов
/ 25 апреля 2018

У меня были некоторые проблемы с прямой загрузкой файлов с помощью -tag.

Чтобы преодолеть это, я использую метод контроллера, чтобы вернуть файл и поместить загружаемые файлы в их собственную папку в web-app /:

class MyController {

    @Autowired()
    AssetResourceLocator assetResourceLocator

    def downloadExcelTemplate () {

        String fileName = "MyExcelFile.xlsx"

        /* Note: these files are found in /web-app/downloadable directory */

        Resource resource = assetResourceLocator.findResourceForURI("/downloadable/$fileName")

        response.setHeader "Content-disposition", "attachment; filename=${resource.filename}"
        response.contentType = 'application/vnd.ms-excel'
        response.outputStream << resource.inputStream.bytes
    }
}

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

...