#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