--Umgebung - CentOS Linux release 7.8.2003 (Core) - Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0) - openjdk version "11.0.7" 2020-04-14 LTS - JSF 2.3.9
Name und Größe aus der Dateischnittstelle extrahieren und überprüfen
Das Dateiobjekt ist eine spezielle Art von Blob-Objekt, das überall dort verwendet werden kann, wo Blob verfügbar ist. File - Web API | MDN
upload.js
/**
*Stellen Sie fest, ob die Erweiterung korrekt ist.
* @param {string}Dateiname.
* @return {Boolean} true:richtig.
*/
function isCorrectExtension(name) {
//Beginnend mit einem anderen Zeichen als einem Leerzeichen. ".jpg」「.png」「.gif」「.Zeichen, die mit "psf" enden(Unempfindlich gegen Groß- und Kleinschreibung[i])
var format = new RegExp('([^\s]+(\\.(jpg|png|gif|pdf))$)', 'i');
return format.test(name);
}
Sonderzeichen | Bedeutung |
---|---|
^ | An den Anfang der Eingabe anpassen |
$ | Übereinstimmung am Ende der Eingabe |
\s | Entspricht Leerzeichen einschließlich Leerzeichen, Tabulatoren, Seitenumbrüchen und Zeilenumbrüchen |
--Referenz
upload.js
/**
*Stellen Sie fest, ob die Dateigröße korrekt ist.
* @param {number}Dateigröße(Byteeinheit).
* @return {Boolean} true:richtig.
*/
function isCorrectSize(size) {
/** @type {number}Maximal zulässige Größe(1MB). */
var maxSize = 1024 * 1024;
return size <= maxSize;
}
Drei Methoden, die ich mir ausgedacht habe, damit ich sie je nach Situation anwenden kann
window.opener
in der JavaScript-Verarbeitung des untergeordneten Bildschirms--Referenz
Übergeordneter Bildschirm
...Kürzung...
<h:inputHidden id="extErrMessage" value="Erweiterungen sind außerhalb des Geltungsbereichs." />
<h:inputHidden id="sizeErrMessage" value="Die Dateigröße ist zu groß." />
...Kürzung...
upload.js
...Kürzung...
if (!isCorrectExtension(file.name)) {
errMessage += window.opener.$('#extErrMessage').text();
}
if (!isCorrectSize(file.size)) {
if (errMessage != '') {
errMessage += '<br />';
}
errMessage += window.opener.$('#sizeErrMessage').text();
}
...Kürzung...
f: viewParam
und legen Sie ihn als Backing Bean fest.parseJSON
in JavaScriptÜbergeordneter Bildschirm
...Kürzung...
<input type="button" value="hochladen" onclick="#{uploadBean.onClick}" />
...Kürzung...
UploadBean.java
/**
*Rufen Sie den JavaScript-Code ab, der für das onClick-Attribut ausgegeben werden soll.
* @JavaScript-Code zurückgeben.
*/
public String getOnClick() {
StringBuilder builder = new StringBuilder();
builder.append("window.open('upload.jsf");
builder.append("?key=");
builder.append(urlEncode("formId:file"));
builder.append("&extErrMessage=");
builder.append(urlEncode("Erweiterungen sind außerhalb des Geltungsbereichs."));
builder.append("&sizeErrMessage=");
builder.append(urlEncode("Die Dateigröße ist zu groß."));
builder.append("', '', 'width=500,height=100'); return false;");
return builder.toString();
}
/**
*URL codieren und org zurückgeben.
* @param org
* @return
*/
private String urlEncode(String org) {
try {
return URLEncoder.encode(org, "utf-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
upload.xml(Untergeordneter Bildschirm)
...Kürzung...
<f:metadata>
<ui:remove>Empfangen Sie GET-Parameter</ui:remove>
<f:viewParam name="key" value="#{uploadBean.key}"/>
<f:viewParam name="extErrMessage" value="#{uploadBean.extErrMessage}" />
<f:viewParam name="sizeErrMessage" value="#{uploadBean.sizeErrMessage}" />
</f:metadata>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<h:outputScript library="js" name="upload.js"/>
<ui:remove>Stellen Sie die Fehlermeldung in das JSON-Format</ui:remove>
<script id="errMessage" type="application/json">
{"ext" : "#{uploadBean.extErrMessage}", "size" : "#{uploadBean.sizeErrMessage}"}
</script>
...Kürzung...
upload.js
...Kürzung...
/** @type {array}Fehlermeldung in der Kopfmarke platziert. */
var message = $.parseJSON($('#errMessage').html());
/** @type {object}Ausgewählte Datei. */
var file = inputFile.files[0];
if (!isCorrectExtension(file.name)) {
errMessage += message.ext;
}
if (!isCorrectSize(file.size)) {
if (errMessage != '') {
errMessage += '<br />';
}
errMessage += message.size;
}
...Kürzung...
UploadBean.java
...Kürzung...
/**
*Erhalten Sie die Fehlermeldung, wenn ein Fehler in der Erweiterung auftritt.
* @Fehlermeldung zurückgeben.
*/
public String getExtErrMessage() {
return "Erweiterungen sind außerhalb des Geltungsbereichs.";
}
/**
*Erhalten Sie die Fehlermeldung, wenn ein Fehler in der Größe auftritt.
* @Fehlermeldung zurückgeben.
*/
public String getSizeErrMessage() {
return "Die Dateigröße ist zu groß.";
}
...Kürzung...
upload.xml(Untergeordneter Bildschirm)
<ui:remove>Stellen Sie die Fehlermeldung in das JSON-Format</ui:remove>
<script id="errMessage" type="application/json">
{"ext" : "#{uploadBean.extErrMessage}", "size" : "#{uploadBean.sizeErrMessage}"}
</script>
Übergeordneter Bildschirm
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<ui:composition template="template.xhtml">
<ui:define name="js">
<h:outputScript library="js" name="upload.js"/>
</ui:define>
<ui:define name="content">
<h3>Überprüfen Sie die Eingabe der Datei</h3>
<h:form id="formId">
<div id="uploadArea">
<ui:fragment rendered="#{!uploadBean.upload}">
<h:button value="hochladen" onclick="showPopup();"/>
<h:inputText id="file" style="display:none;">
<f:ajax event="change" execute="@form" render="@form" listener="#{uploadBean.uploadFile}" />
</h:inputText>
</ui:fragment>
<ui:fragment rendered="#{uploadBean.upload}">
<h:outputText value="#{uploadBean.file.name}" />
<h:commandButton value="Löschen">
<f:ajax execute="@form" render="@form" listener="#{uploadBean.deleteFile}" />
</h:commandButton>
</ui:fragment>
<div><h:message for="uploadArea" errorClass="error" warnClass="warn" infoClass="info" /></div>
</div>
</h:form>
</ui:define>
</ui:composition>
</html>
upload.xhtml(Untergeordneter Bildschirm)
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Datei zum Hochladen</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<h:outputScript library="js" name="upload.js"/>
<ui:remove>Stellen Sie die Fehlermeldung in das JSON-Format</ui:remove>
<script id="errMessage" type="application/json">
{"ext" : "#{uploadBean.extErrMessage}", "size" : "#{uploadBean.sizeErrMessage}"}
</script>
</h:head>
<body>
<div>
<h:inputFile id="inputFile" onchange="checkFile(this)" value="uploadBean.file" />
</div>
<div>
<h:button value="OK" onclick="submit('#{uploadBean.key}');" />
<h:button value="schließen" onclick="window.close();" />
</div>
</body>
</html>
upload.js
/**Zeigen Sie einen Popup-Bildschirm an. */
function showPopup() {
window.open('upload.jsf', '', 'width=500,height=100');
}
/**
*Überprüfen Sie die hochgeladenen Dateien.
* @param {Object}Dateiobjekt.
*/
function checkFile(inputFile) {
//Löschen Sie die Fehlermeldung.
$('.errMessage').remove();
/** @type {String}Fehlermeldung angezeigt werden. */
var errMessage = '';
if (inputFile.files && inputFile.files[0]) {
/** @type {array}Fehlermeldung in der Kopfmarke platziert. */
var message = $.parseJSON($('#errMessage').html());
/** @type {object}Ausgewählte Datei. */
var file = inputFile.files[0];
if (!isCorrectExtension(file.name)) {
errMessage += message.ext;
}
if (!isCorrectSize(file.size)) {
if (errMessage != '') {
errMessage += '<br />';
}
errMessage += message.size;
}
}
if (errMessage != '') {
//Fügen Sie eine Fehlermeldung hinzu.
$('#inputFile').after('<br /><span class="errMessage" style="color: red;">' + errMessage + '</span>');
//Datei löschen.
inputFile.value = null;
}
}
/**
*Stellen Sie fest, ob die Erweiterung korrekt ist.
* @param {string}Dateiname.
* @return {Boolean} true:richtig.
*/
function isCorrectExtension(name) {
var format = new RegExp('([^\s]+(\\.(jpg|png|gif|pdf))$)', 'i');
return format.test(name);
}
/**
*Stellen Sie fest, ob die Dateigröße korrekt ist.
* @param {number}Dateigröße(Byteeinheit).
* @return {Boolean} true:richtig.
*/
function isCorrectSize(size) {
/** @type {number}Maximal zulässige Größe(1MB). */
var maxSize = 1024 * 1024;
return size <= maxSize;
}
/**
*Aktualisieren Sie die Elemente des Hauptbildschirms und schließen Sie den Bildschirm.
* @param {string}Schlüssel-ID des zu aktualisierenden übergeordneten Bildschirmelements.
*/
function submit(key) {
window.opener.$('#'+key.replace(/:/g,"\\:")).change();
window.close();
}
UploadBean.java
package brans;
import java.io.IOException;
import java.io.Serializable;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import javax.servlet.http.Part;
import lombok.Data;
@Named
@ViewScoped
@Data
public class UploadBean implements Serializable {
/** serialVersionUID. */
private static final long serialVersionUID = -355651229394801584L;
/**Dateidaten. */
private Part file;
/**
*Stellen Sie fest, ob die Datei hochgeladen wurde.
* @return true:Wurden hochgeladen.
*/
public boolean isUpload() {
return this.file != null;
}
/**
*Erhalten Sie die Fehlermeldung, wenn ein Fehler in der Erweiterung auftritt.
* @Fehlermeldung zurückgeben.
*/
public String getExtErrMessage() {
return "Erweiterungen sind außerhalb des Geltungsbereichs.";
}
/**
*Erhalten Sie die Fehlermeldung, wenn ein Fehler in der Größe auftritt.
* @Fehlermeldung zurückgeben.
*/
public String getSizeErrMessage() {
return "Die Dateigröße ist zu groß.";
}
public String getKey() {
return "formId:file";
}
public void uploadFile() throws IOException {
if (!isUpload()) {
return;
}
if (!isCorrectExtension(this.file.getName())) {
deleteFile();
}
if (!isCorrectSize(this.file.getSize())) {
deleteFile();
}
}
/**
*Löschen Sie die hochgeladene Datei.
* @löst einen IOException-Fehler aus.
*/
public void deleteFile() throws IOException {
this.file.delete();
}
/**
*Stellen Sie fest, ob die Erweiterung korrekt ist.
* @Parametername Dateiname.
* @return true:richtig.
*/
private boolean isCorrectExtension(String name) {
if (name != null) {
return name.matches("([^\\s]+(\\.(?i)(jpg|png|gif|pdf))$)");
}
return true;
}
/**
*Stellen Sie fest, ob die Dateigröße korrekt ist.
* @Parametergröße Dateigröße(Teilzeitstelle).
* @return true:richtig.
*/
private boolean isCorrectSize(long size) {
long maxSize = 1024 * 1024;
return size <= maxSize;
}
}
Recommended Posts