Quote Originariamente inviata da andbin Visualizza il messaggio
Comunque dato che usi Spring, ti basta indicare il content-type in uscita usando l'attributo produces di @RequestMapping.


@RequestMapping(value = "/std/service/file", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
Funziona! Il browser scarica direttamente il file binario. Grazie


Quote Originariamente inviata da andbin Visualizza il messaggio
Invece di mettere la costante di MediaType, puoi anche mettere direttamente "application/octet-stream" , è lo stesso.
Dove dovrei mettere "application/octet-stream"?


Quote Originariamente inviata da andbin Visualizza il messaggio
Premesso che se il file è relativamente piccolo, "tirar su" un array di byte con l'intero contenuto del file non è un grosso problema. Diverso sarebbe se il file fosse di svariati megabyte (e specialmente se ci fossero molte richieste concorrenti per un download di quel tipo).
Ci sono comunque altre tecniche per non dover tirar su l'intero file.
Le richieste sono univoche per singolo file: espongo il servizio per scaricare il file e mando l'URL un servizio esterno che si scarica il file dal percorso che ho esposto.

Ora dovrei creare l'URL con /nomefiledascaricare per creare gli URL dinamici.
Se hai un consiglio anche su questo, sarò felice.
Ho provato a scrivere questo (non so se esiste una soluzione migliore...)
codice:
@RequestMapping(value = "/std/service/file/{filenameToSearch}"
            ,method = RequestMethod.GET
            ,produces = MediaType.APPLICATION_OCTET_STREAM_VALUE
    )
    private byte[] getFileToSign(@PathVariable String filenameToSearch) {
        byte[] responseBinaryFile = new byte[0];
        File pathFolder = new File("C:\\");
        File[] files = pathFolder.listFiles();
        int nFileInFolder = files.length;
        if (files != null) {
            for (int i = 0; i < nFileInFolder; i++) {
                String pathFile = files[i].toString();
                String filename = pathFile.substring(pathFile.lastIndexOf("\\") + 1, pathFile.length());
                if (pathFile != null && pathFile.length() > 0) {
                    if(filename.contains(filenameToSearch))
                    try {
                        responseBinaryFile = Files.readAllBytes(new File(pathFile).toPath());
                        break;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return responseBinaryFile;
    }