2010-01-12 4 views
0

J'envoie un fichier image d'une application iPhone à une application http Post. L'application Post est un service Web Java reposant qui accepte les demandes Post. J'ai la méthode Post receiveing ​​un tableau d'octets et écrire ensuite un fichier comme celui-ci:Fichier image non visible au format

private void writeToFile(byte[] str) { 
String strFilePath = "/Users/j/Desktop/joe.png"; 

try 
{ 
FileOutputStream fos = new FileOutputStream(strFilePath); 

    fos.write(str); 
    fos.close(); 
} 
} 

le fichier écrit avec succès à mon disque local mais quand je tente d'ouvrir le fichier, il n'est pas visible. J'ai une erreur qui ne peut pas être ouvert et peut être endommagé. Est-ce que quelqu'un sait pourquoi je ne peux pas voir cette image?

+0

Il est impossible de dire à partir de cette information. Si vous téléchargez le fichier dans ses formes correctes et endommagées, cela pourrait nous en dire plus. – joriki

+0

Si le flux d'octets que vous recevez n'a pas d'en-têtes PNG, vous devrez bien sûr les ajouter à votre fichier. :) – anroesti

Répondre

0

Il est difficile de vous conseiller sans voir plus de code, mais si tout ce que vous faites est d'écrire les données directement dans un fichier, vous pouvez aussi bien le stocker dans un tableau d'octets et le diffuser directement sur le flux de sortie, comme dans cet exemple très simplifié:

FileOutputStream out = new FileOutputStream("myfile.jpg"); 
InputStream in = request.getInputStream(); 
while((int ch = in.read()) != -1){ 
    out.write(ch); 
} 

Il est difficile de donner des conseils beaucoup plus précis sans voir plus de code.

0

Peut-être qu'il y a une sorte de hickup avec le discarting du filehandler. Il peut être utile d'essayer d'appeler le garbage collector après avoir fermé le flux de fichiers.

Runtime.getRuntime().gc(); 

Il m'a aidé une fois à feleting des fichiers sur win7. En dernier recours, vous pouvez également essayer de vérifier que les données correctes sont envoyées en calculant un md5hash mais http ne doit pas perdre de données.