Spring-boot Web Service: я пытаюсь скачать CSV-файл, но получаю CSV-файл с HTML, CSS, JS внутри - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать код веб-службы для проекта университета.Я все еще пытаюсь выяснить, как работает Spring-boot и как работает его жизненный цикл, поэтому, возможно, мой код будет полон ошибок.В любом случае, мне нужно загрузить набор данных с URL, расшифровать файл JSON и найти внутри другой URL, содержащий файл .csv.Я думаю, что код до второй загрузки правильный.Но я обнаружил некоторые проблемы.

Как только я открою localhost: 8080, мой браузер автоматически загрузит пустой файл "t1.csv" (в папке загрузок) и второй файл "t1-prova.csv" вкаталог проекта.Второй заполнен HTML, CSS и JS-кодом.Но я могу получить настоящий .csv файл URL.

Может кто-нибудь помочь мне понять, что происходит?Вот мой код:

@RestController  // It is also possible to @Controller.
public class StreamingResponseController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public void getSteamingFile(HttpServletResponse response) throws Exception {
//File f = new File("C:\\Users\\guido\\Download\\t1.csv"); trying to download the file just if the files doesn't exist
  boolean b = true;
  if(b/*f.exists() && !f.isDirectory()*/){  //if condition that doesn't work, so I had to add a boolean
    response.setContentType("text/csv");
    response.setHeader("Content-Disposition", "attachment; filename=\"t1.csv\"");
    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){
            if ( o instanceof JSONObject ) {
                JSONObject o1 = (JSONObject)o; 
                String format = (String)o1.get("format");
                String urlD = (String)o1.get("url");
                System.out.println(format + " | " + urlD);
                if(format.equals("csv")) {
                    download(urlD, "t1.csv");
                }
            }
        }
        System.out.println( "OK" );
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

public static void download(String url, String fileName) {
    try {

        /* attempt that works, but I tried other ways
         * InputStream in = URI.create(url).toURL().openStream();
         * System.out.println("attempt error");
         * Files.copy(in, Paths.get(fileName));
         * System.out.println("attempt error 2");
           in.close();*/

        BufferedInputStream inputStream = new BufferedInputStream(new URL(url).openStream());  
        FileOutputStream fileOS = new FileOutputStream("t1-prova.csv");
        byte data[] = new byte[1024];
        int byteContent;
        while ((byteContent = inputStream.read(data, 0, 1024)) != -1) {
               fileOS.write(data, 0, byteContent);
        }
        fileOS.close();
        inputStream.close();

    } catch (IOException e) {
        System.out.println("ciao");
    }
}}

Заранее спасибо всем, кто постарается мне помочь.

Гвидо

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