Как скачать файл прямо из браузера с помощью Spring Boot - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь создать приложение, которое загружает файл с URL-адреса после анализа JSON, но оно загружает файл в каталог приложения, а не в папку загрузки клиентов. Может кто-нибудь поможет мне понять, как это сделать?

Вот мой код:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getSteamingFile() throws Exception { //get method

  File f = new File("t1.csv");

  if(!f.exists() && !f.isDirectory()){

    try {

         URLConnection openConnection = new URL("https://www.dati.gov.it/api/3/action/package_show?id=537c1138-4c5f-41bb-aec8-862954b67b28").openConnection();
         openConnection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
         InputStream in = openConnection.getInputStream();

         String data = "";
         String line = "";
         try {
           InputStreamReader inR = new InputStreamReader(in);
           BufferedReader buf = new BufferedReader(inR);

           while (( line = buf.readLine()) != null) {
               data+=line;
               System.out.println(line);
           }

         } finally {
           in.close();
         }

        JSONObject obj = (JSONObject) JSONValue.parseWithException(data); 
        JSONObject objI = (JSONObject) (obj.get("result"));
        JSONArray objA = (JSONArray) (objI.get("resources"));

        for(Object o: objA){ //json parse to get the url
            if (o instanceof JSONObject) {
                JSONObject o1 = (JSONObject)o; 
                String format = (String)o1.get("format");
                String urlA = (String)o1.get("url");
                urlA = urlA.replaceAll("&","&");
                URL urlD = new URL (urlA);
                System.out.println(format + " | " + urlD);
                if(format.equals("csv")) {
                    File fname = new File ("t1.csv");
                    download(urlD, fname);
                }
            }
        }
        System.out.println( "OK" );
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  else System.out.println("File presente, impossibile scaricare");

  return "index";}

public static void download(URL url, File fileName) {
    try {
        FileUtils.copyURLToFile(url, fileName);     
    } catch (IOException e) {
        System.out.println("Errore di Input/Output" + e);
    }
}

1 Ответ

0 голосов
/ 21 июня 2019

Здесь вы должны внести изменения:

File fname = new File ("t1.csv");

Прямо сейчас, как вы можете видеть, вы передаете исключительно имя файла (без указания пути).Вам просто нужно добавить путь к папке загрузок клиентов.Что-то вроде этого будет работать для меня на Mac и Linux:

File fname = new File ("~/Downloads/t1.csv");
...