Momentan verwende ich JxBrowser 6.14.2, um eine Datei zu speichern. Ich habe jedoch festgestellt, dass die Standardimplementierung nicht meinen Erwartungen entspricht.JxBrowser 6.14.2 Dateihandle-Ausnahme herunterladen
Problem 1 Wenn die Datei existiert, scheint sie die vorherige zu überschreiben. Datei und fordert den Benutzer nicht auf. [gelöst durch den folgenden Code]
Problem 2 Schlimmer noch, wenn die Datei geöffnet wird und daher nicht überschrieben werden kann, wird dem Benutzer keine Warnung angezeigt. [Echtes Problem]
Deshalb habe ich die DownloadHandler von JxBrowser bereitgestellt implementieren Problem 1 zu lösen, wie folgt:
browser.setDownloadHandler(new DownloadHandler() {
@Override
public boolean allowDownload(final DownloadItem download) {
String downloadPath = download.getDestinationFile().getPath();
final String fileType = Files.getFileExtension(downloadPath);
JFileChooser fc = new JFileChooser() {
@Override
public void approveSelection() {
String filePath = getSelectedFile().getPath();
debug_log.debug("filePath = " + filePath);
File f = new File(filePath + "." + fileType);
if (f.exists() && getDialogType() == SAVE_DIALOG) {
int result =
JOptionPane.showConfirmDialog(
this, "override file ?", "override file ?",
JOptionPane.YES_NO_CANCEL_OPTION);
switch (result) {
case JOptionPane.YES_OPTION :
break;
case JOptionPane.NO_OPTION :
return;
case JOptionPane.CLOSED_OPTION :
return;
case JOptionPane.CANCEL_OPTION :
cancelSelection();
return;
}
}
download.setDestinationFile(f);
super.approveSelection();
}
};
fc.setAcceptAllFileFilterUsed(false);
fc.setMultiSelectionEnabled(false);
fc.setFileFilter(new FileNameExtensionFilter("*." + fileType, fileType));
int returnVal = fc.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
return true;
}
else {
return false;
}
}
});
Jedoch kann der obige Code Problem lösen 1 nur, aber nicht Problem 2.
Ich erwarte, JxBrowser einige Ausnahmen oder zumindest einen booleschen Indikator zu werfen, um mir zu sagen, dass ein Fehler beim Herunterladen der Datei ist, zum Beispiel, Dateipfad zum Speichern angegeben wird derzeit geöffnet, daher wird eine Ausnahme ausgelöst. Und was ich tun muss, ist, irgendeine dieser Ausnahmen (z. B. IOException) zu fangen, die von JxBrowser beim Speichern von Teilen ausgelöst werden, und dem Benutzer mitzuteilen, dass beim Speichern der Datei Fehler aufgetreten sind.
Hoffe jemand kann mein Problem lösen.
Hier ist das Verhalten, das ich von Chromium v55.0.2883.0 bekomme Um einen Dialog beim Speichern der Datei aufzurufen, gehe ich zu Einstellungen -> Show Advanced Settings -> Downloads Abschnitt. Kreuzen Sie die Option "Fragen Sie, wo jede Datei vor dem Download gespeichert werden soll" Dann gehen Sie, um eine Datei herunterzuladen und zu öffnen. Als nächstes versuchen Sie erneut herunterzuladen und speichern Sie als den gleichen Dateinamen. In Chrome wird ein Dialogfeld angezeigt: "Die Datei ist bereits vorhanden. Möchten Sie sie überschreiben?" Wenn Sie auf Ja klicken, beginnt die Datei mit dem Download und zeigt dem Benutzer "fehlgeschlagen - Unzureichende Berechtigung" an. Das ist, was ich JxBrowser erwarten, aber es scheint, das Verhalten ist nicht das gleiche – CHANist
Ich habe die gleiche Option in meinen Google Chrome-Einstellungen aktiviert. Könnten Sie mir bitte die detaillierten Schritte geben, wie ich dieses Problem reproduzieren kann: den Link zu der herunterzuladenden Datei, die Art, wie Sie diese Datei öffnen, usw. –
versuchen Sie einfach, eine Excel-Datei herunterzuladen, wie von folgendem Link, www .econ.yale.edu/~ shiller/data/ie_data.xls. Und öffnen Sie die Excel-Datei mit Excel.Schließen Sie die Excel-Datei nicht und versuchen Sie, die Excel-Datei erneut zu speichern. Nach Abschluss des Downloads kann ein "Fehlgeschlagen - Unzureichende Berechtigungen" gefunden werden. Das Bild kann in https://drive.google.com/file/d/0B3kkwc85d0gDZnRyRzkydUdHVTQ/view?usp=sharing gefunden werden. – CHANist