Я пытаюсь написать код веб-службы для проекта университета.Я все еще пытаюсь выяснить, как работает 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");
}
}}
Заранее спасибо всем, кто постарается мне помочь.
Гвидо