De retour de fichier à partir du Printemps @Contrôleur OutputStream

Je souhaite retourner un fichier à partir d'un Printemps contrôleur. J'ai déjà API qui peut me donner toute la mise en œuvre de OutputStream et puis j'ai besoin de l'envoyer à un utilisateur.

De sorte que le flux est quelque chose comme ça:

arriver outputstream -> service passe cette outputstream de contrôleur de -> contrôleur a pour l'envoyer à un utilisateur

Je pense que j'ai besoin d'inputstream de le faire et j'ai aussi trouvé de Apache Commons api fonctionnalité qui ressemble à ceci:

IOUtils.copy(InputStream is, OutputStream os)

mais le problème est, il convertit l'autre côté -> pas de os à est, mais à partir de est à os.

Modifier

pour être clair, parce que je vois les réponses ne sont pas les coups chose:
J'utilise Dropbox api et de recevoir des fichiers dans OutputStream et je veux que ce flux de sortie pour être envoyé à l'utilisateur lors de la saisie d'une URL

FileOutputStream outputStream = new FileOutputStream(); //can be any instance of OutputStream
DbxEntry.File downloadedFile = client.getFile("/fileName.mp3", null, outputStream);

C'est pourquoi je parlais de conversion outputstream à inputstream, mais n'ont aucune idée de comment le faire. En outre, je suppose qu'il y a une meilleure façon de résoudre ce problème (peut-être revenir tableau d'octets en quelque sorte de outputstream)

J'essayais de passer servlet outputstream [réponse.getOutputstream()] paramètre à la méthode qui télécharge un fichier à partir de dropbox, mais il ne fonctionne pas, à tous les

Edit 2

Le "flux" de mon application est quelque chose comme ceci: @Joeblade

  1. Utilisateur saisit url: /download/{nom_fichier}
  2. Printemps Contrôleur de capture de l'url et des appels la @couche de Service pour télécharger le fichier et de le transmettre à qui de contrôleur:
    @RequestMapping(value = "download/{name}", method = RequestMethod.GET)
    public void getFileByName(@PathVariable("name") final String name, HttpServletResponse response) throws IOException {
        response.setContentType("audio/mpeg3");
        response.setHeader("Content-Disposition", "attachment; filename=" + name);
        service.callSomeMethodAndRecieveDownloadedFileInSomeForm(name); //<- and this file(InputStream/OutputStream/byte[] array/File object/MultipartFile I dont really know..) has to be sent to the user
    }
  3. Maintenant l' @appels de Service Dropbox API et télécharge le fichier spécifié par file_name, et met tout à la OutputStream, et passe ensuite (dans une certaine forme.. peut-être OutputStream, byte[] tableau ou tout autre objet - je ne sais pas ce qui est mieux pour l'utilisation) du contrôleur:
    public SomeObjectThatContainsFileForExamplePipedInputStream callSomeMethodAndRecieveDownloadedFileInSomeForm(final String name) throws IOException {
        //here any instance of OutputStream - it needs to be passed to client.getFile lower (for now it is PipedOutputStream)
        PipedInputStream inputStream = new PipedInputStream(); //for now
        PipedOutputStream outputStream = new PipedOutputStream(inputStream);
    
    
        //some dropbox client object
        DbxClient client = new DbxClient();
        try {
            //important part - Dropbox API downloads the file from Dropbox servers to the outputstream object passed as the third parameter
            client.getFile("/" + name, null, outputStream);
        } catch (DbxException e){
            e.printStackTrace();
        } finally {
            outputStream.close();
        }
        return inputStream;
    }
  4. Contrôleur reçoit le fichier (je ne sais pas, à tous, qui, par la forme comme je l'ai dit en haut) et le transmet ensuite à l'utilisateur

Le truc c'est de recevoir OutputStream avec le fichier téléchargé en appelant dropboxClient.getFile() méthode, puis ce OutputStream qui contient le fichier téléchargé, doit être envoyé à l'utilisateur, comment faire?

OriginalL'auteur azalut | 2015-01-02