DerSvenIsts
Grünschnabel
Hallo zusammen,
ich habe ein Problem, bei dem ich nicht wirklich weiter komme und setze auf Eure Hilfe ;-)
Ich möchte ein Bild (BufferedImage), das per Java von einer IP-Webcam aufgenommen wurde auf einer SMB-Freigabe mit JCIFS-Methoden speichern, indem dort ein entsprechendes *.jpg-File erzeugt wird. Das Problem: Die erzeugte Datei auf der Freigabe scheint "defekt" zu sein, da sie sich mit einem Bildbetrachter nicht öffnen lässt. Wenn ich das *.jpg File stattdessen auf der lokalen Festplatte, also ohne JCIFS-Methoden, erstellen lasse, kann das Bild problemlos im Bildbetrachter geöffnet werden.
Hier ein Auszug aus dem Code der durchlaufen wird (ohne Exception-Handling):
Resultat ist bei Aufruf der Methode, dass eine ca. 13kb große Datei "test.jpg" im SMB-Share erstellt wird, die nicht geöffnet werden kann.
Wenn das BufferedImage mit folgendem Code auf der lokalen Platte erstellt wird (ca. 12kb), kann das Bild anschließend problemlos geöffnet werden:
Ich könnte jetzt natürlich das File auf der lokalen Platte erstellen und dann auf dem SMB-Share umkopieren, aber das ist ja nicht wirklich im Sinne des Erfinders.
Hoffe auf Euer Feedback. Danke im Voraus!
ich habe ein Problem, bei dem ich nicht wirklich weiter komme und setze auf Eure Hilfe ;-)
Ich möchte ein Bild (BufferedImage), das per Java von einer IP-Webcam aufgenommen wurde auf einer SMB-Freigabe mit JCIFS-Methoden speichern, indem dort ein entsprechendes *.jpg-File erzeugt wird. Das Problem: Die erzeugte Datei auf der Freigabe scheint "defekt" zu sein, da sie sich mit einem Bildbetrachter nicht öffnen lässt. Wenn ich das *.jpg File stattdessen auf der lokalen Festplatte, also ohne JCIFS-Methoden, erstellen lasse, kann das Bild problemlos im Bildbetrachter geöffnet werden.
Hier ein Auszug aus dem Code der durchlaufen wird (ohne Exception-Handling):
Java:
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;
public class SmbSaveService {
private void saveImageToSmbShare(BufferedImage imageToSave) {
String pathAndFile = "smb://192.168.0.1/bilder/test.jpg";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,null, null);
SmbFile sFile = new SmbFile(pathAndFile, auth);
SmbFileOutputStream sfos = new SmbFileOutputStream(sFile);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(anImageToSave, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
BufferedReader brl = new BufferedReader(new InputStreamReader(is));
String b = null;
while ((b = brl.readLine()) != null) {
sfos.write(b.getBytes());
}
sfos.flush();
} // end of method
} // end of class
Resultat ist bei Aufruf der Methode, dass eine ca. 13kb große Datei "test.jpg" im SMB-Share erstellt wird, die nicht geöffnet werden kann.
Wenn das BufferedImage mit folgendem Code auf der lokalen Platte erstellt wird (ca. 12kb), kann das Bild anschließend problemlos geöffnet werden:
Java:
ImageIO.write(imageToSave, "jpg", new File("c:/temp/test.jpg"));
Ich könnte jetzt natürlich das File auf der lokalen Platte erstellen und dann auf dem SMB-Share umkopieren, aber das ist ja nicht wirklich im Sinne des Erfinders.
Hoffe auf Euer Feedback. Danke im Voraus!