La conversion de MultipartFile à java.io.Fichier sans avoir à les copier sur la machine locale
J'ai un Java Spring MVC de l'application web. De client, par AngularJS, je suis le téléchargement d'un fichier et de le poster pour le Contrôleur de webservice.
Dans mon Contrôleur, je suis gettinfg comme MultipartFile et je peux le copier sur la machine locale.
Mais je veux télécharger le fichier Amazone S3 seau. Donc, je dois le convertir en java.io.Fichier. Maintenant ce que je fais, je suis le copier sur la machine locale et le téléchargement puis de S3 en utilisant jets3t.
Ici, c'est ma façon de convertir en contrôleur de
MultipartHttpServletRequest mRequest=(MultipartHttpServletRequest)request;
Iterator<String> itr=mRequest.getFileNames();
while(itr.hasNext()){
MultipartFile mFile=mRequest.getFile(itr.next());
String fileName=mFile.getOriginalFilename();
fileLoc="/home/mydocs/my-uploads/"+date+"_"+fileName; //date is String form of current date.
Alors que je suis en utilisant FIleCopyUtils de SpringFramework
File newFile = new File(fileLoc);
//if the directory does not exist, create it
if (!newFile.getParentFile().exists()) {
newFile.getParentFile().mkdirs();
}
FileCopyUtils.copy(mFile.getBytes(), newFile);
Donc, il va créer un nouveau fichier sur la machine locale. Ce fichier je suis uplaoding dans S3
S3Object fileObject = new S3Object(newFile);
s3Service.putObject("myBucket", fileObject);
Il crée un fichier dans mon système local. Je ne veux pas créer.
Sans la création d'un fichier dans le système local, comment faire pour convertir un MultipartFIle à java.io.Fichier?
OriginalL'auteur Shiju K Babu | 2014-01-13
Vous devez vous connecter pour publier un commentaire.
MultipartFile, par défaut, est déjà enregistré sur votre serveur sous la forme d'un fichier lorsque l'utilisateur l'a envoyé.
À partir de ce point vous pouvez faire ce que vous voulez avec ce fichier.
Il existe une méthode qui se déplace qu'temp de fichiers vers n'importe quelle destination que vous voulez.
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartFile.html#transferTo(java.io.File)
Mais MultipartFile est juste de l'API, vous pouvez mettre en œuvre toutes autres MultipartResolver
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartResolver.html
Cette API accepte les flux d'entrée et vous pouvez faire ce que vous voulez avec elle. L'implémentation par défaut (généralement de communes-multipart) enregistre temp dir en tant que fichier.
Mais autre problème reste ici - si S3 API accepte un fichier comme paramètre - vous ne pouvez pas faire n'importe quoi avec cette - vous besoin d'un vrai fichier. Si vous voulez éviter de créer des fichiers - créer votre propre S3 API.
Ce qui inspire ce problème ? S3 java-API ? Ou quoi ? Avez-vous la capacité d'envoyer des flux d'entrée de S3 ?
C'est inexact en ce qui concerne S3 API acceptant uniquement le fichier de paramètre, il accepte aussi de la InputStream
OriginalL'auteur Boris
La question est déjà de plus d'un an, donc je ne suis pas sûr si le jets35 lien fourni par l'OP a l'extrait de code suivant à l'époque.
Il s'avère que vous n'avez pas à créer un fichier local en premier. @Boris suggère que vous pouvez nourrir le
S3Object
avec leData Input Stream
,Content Type
etContent Length
vous aurez à partir deMultipartFile.getInputStream()
,MultipartFile.getContentType()
etMultipartFile.getSize()
respectivement.OriginalL'auteur Kostas Filios