Создайте ссылку для загрузки файла на сервере

#java

Вопрос:

Поэтому я создал код, который генерирует zip-файл на моем сервере, а затем удаляет его каждый раз, когда пользователь запрашивает загрузку файла на клиенте. Есть еще один шаг, которого мне не хватает, и я, похоже, не могу найти правильное решение. Есть ли какой-либо способ сгенерировать временную случайную ссылку, которую сервер вернет клиенту и которая будет ссылкой для загрузки этого zip-файла?

     public String getDownloadLink(String[] files) throws IOException {
        
        [...] // Some stuff goes here but it is irrelevant to the situation. (I generate a download folder!)

        ZipUtil.pack(new File("Download"), new File("selected-files.zip"));

        // Generating a download link
        String downloadLink = ""; // This is what I am trying to figure out!!!


        // Deleting both the folder and the zip
        FileUtils.deleteDirectory(new File("Download"));
        File myObj = new File("selected-files.zip");
        if(myObj.delete()){} else{}

        // Download link
        return downloadLink;
}
 

Комментарии:

1. Вероятно, это зависит от вашего серверного программного обеспечения и платформы. Вместо создания файла для загрузки и ссылки, можете ли вы просто вернуть zip-поток клиенту для немедленной загрузки?

2. Все гораздо сложнее, чем это. Я извлекаю большие двоичные объекты из azure и помещаю их в папку с названием «Загрузка», которую затем заархивирую. Теперь я хочу создать ссылку для zip-файла и удалить файл, чтобы освободить место.

Ответ №1:

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

UUID может быть использован для этой цели в качестве:

     //...
    String zipFileName = UUID.randomUUID().toString()   ".zip";
    ZipUtil.pack(new File("Download"), new File(zipFileName));
    //...
    String downloadLink = "https://my.server/download?fileName="   zipFileName;
    //...
 

Затем, когда клиент фактически загрузит файл, обработчик запроса получит параметр запроса имени файла и будет использовать его для обслуживания файла (а затем, возможно, удалит его).

Комментарии:

1. Вот что я в итоге сделал:P