Téléchargement de fichiers à l'aide de service REST
- Je utiliser de REPOS après le service (à partir de ce tutoriel) pour faire de l'upload de fichiers à partir d'un divers nombre de clients à mon serveur GlassFish, à l'aide de jersey multipart mise en œuvre:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;
@Path("/fileupload")
public class UploadFileService {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String uploadedFileLocation = "c://uploadedFiles/" + fileDetail.getFileName();
//save it
saveToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded via Jersey based RESTFul Webservice to: " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
//save uploaded file to new location
private void saveToFile(InputStream uploadedInputStream,
String uploadedFileLocation) {
try {
OutputStream out = null;
int read = 0;
byte[] bytes = new byte[1024];
out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ce code fonctionne très bien pour moi, mais j'ai remarqué suivantes:
- d'abord, le fichier est téléchargé quelque part dans le serveur
- la méthode uploadFile(...) est déclenchée avec un InputStream à l'
fichier à télécharger, donc je peux en faire une copie à l'endroit désiré à l'aide de
saveToFile(...)
Mes questions sont:
- où se trouve le fichier (voir (1) ci-dessus), d'abord stockées?
- Comment faire pour supprimer le fichier téléchargé afin de libérer des ressources?
Mise à JOUR de 1
Joint l'InputStream dump:
La chose étrange ici .tmp fichier de capture d'écran est de 0 octets!
L' .tmp est supprimé après.close()
Bonjour pouvez vous s'il vous plaît partager le côté client de la mise en œuvre, je veux savoir comment faire pour envoyer un fichier à ce service? merci
fait le code ci-dessus fonctionne pour vous? Depuis il ne fonctionne pas pour moi. Pouvez-vous s'il vous plaît aider moi
pouvez vous s'il vous plaît de partager vos exception ou une description de ce que vous faites et ce qui ne fonctionne pas?
fait le code ci-dessus fonctionne pour vous? Depuis il ne fonctionne pas pour moi. Pouvez-vous s'il vous plaît aider moi
pouvez vous s'il vous plaît de partager vos exception ou une description de ce que vous faites et ce qui ne fonctionne pas?
OriginalL'auteur filip_j | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
Le fichier téléchargé est sans doute gardé en mémoire (ce qui signifie qu'il sera libéré lorsque la inputstream est propre par le gc) ou il est stocké dans le système par défaut temp-dossier. (Probablement le même dossier renvoyé par
System.getProperty("java.io.tmpdir")
, ce qui signifie qu'il est nettoyé à chaque fois que vous nettoyer les fichiers temporaires de votre système de fichiers.L'emplacement exact dépend du cadre qui gère le restservices pour vous. Dans votre cas, il semble être de jersey.
Je ne sais pas où jersey enregistre ces fichiers. Vous pourriez essayer de regarder la condition inputstream pour voir quel type il est, et où il est stocké.
OriginalL'auteur Buurman