J'utilise NanoHTTPD comme serveur web dans mon Android APP, je l'espère, de compresser des fichiers et créer un InputStream côté serveur, et je télécharger le InputStream côté client en utilisant le code A.Comment créer un InputStream ZIP dans Android sans créer de fichier ZIP en premier?
J'ai lu le code B à How to zip and unzip the files? , mais comment créer un InputStream ZIP dans Android sans créer un fichier ZIP d'abord?
BTW, je ne pense pas que le code C est bon moyen, car il fait d'abord le fichier ZIP, puis convertir le fichier ZIP en FileInputStream, j'espère créer un InputStream ZIP directement!
Code A
private Response ActionDownloadSingleFile(InputStream fis) {
Response response = null;
response = newChunkedResponse(Response.Status.OK, "application/octet-stream",fis);
response.addHeader("Content-Disposition", "attachment; filename="+"my.zip");
return response;
}
Code B
public static void zip(String[] files, String zipFile) throws IOException {
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
try {
byte data[] = new byte[BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER_SIZE);
try {
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
out.write(data, 0, count);
}
}
finally {
origin.close();
}
}
}
finally {
out.close();
}
}
code C
File file= new File("my.zip");
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
} catch (FileNotFoundException ex)
{
}
Vous devez créer un flux * de sortie * sur le serveur. Un 'ZipOutputStream', enroulé autour de tout flux de sortie que la technologie du serveur vous donne. – EJP
Merci! Pour EJP, pourriez-vous me donner un exemple de code? – HelloCW
Vous ne pouvez pas créer de ZipInputSteam directement, car ZipInputSteam étend FilterInputStream, de sorte qu'il fonctionne essentiellement comme une classe wrapper qui fournit des fonctionnalités pour que le flux lise les fichiers zip. Vous aurez besoin de quelque chose comme 'new ZipInputStream (nouveau FileInputStream (zipFile))' –