Wenn Sie Dateien über Server hochladen müssen, laden Sie unsere lokalen Dateien auf den Ressourcenserver hoch. Der bessere Weg ist, sie über FTP hochzuladen. Dies wird in Kombination mit SpringMVC+FTP hochgeladen. Wir müssen zunächst verstehen, wie Sie SpringMVC konfigurieren, dann FTP konfigurieren und die Datei schließlich in Kombination mit MultipartFile hochladen.
Das SpringMVC -Upload erfordert mehrere wichtige JAR -Pakete, Feder und zugehörige Pakete können von Ihnen selbst konfiguriert werden. Hier erklären wir hauptsächlich die wichtigsten JAR -Pakete
1: Spring-Web-3.2.9.Release.jar (Das Schlüssel-Jar-Paket des Frühlings können Sie die Version selbst auswählen)
2: Commons-io-2.2.jar (einige Toolpakete, die zur Behandlung von IO im Projekt verwendet werden)
Konfigurationsdatei
SpringMVC verwendet MultipartFile, um Dateien hochzuladen. Daher müssen wir Multipartresolver so konfigurieren
<!-- Upload file interpreter--> <bean id="multipartResolver"> <property name="defaultEncoding" value="utf-8" /> <property name="maxUploadSize" value="10485760" /> <property name="maxInMemorySize" value="4096" /> <property name="resolveLazily" value="true" /> </bean>
Die Attribute werden ausführlich erklärt:
DefaultCoding Konfiguriert das Codierungsformat der Anforderung, Standard ISO-8859-1
Die maximale Einheit der MaxUploadSize -Konfigurationsdatei in Bytes
MaxinMemorySize konfiguriert den Cache von hochgeladenen Dateien in Bytes
Die Eigenschaft Resolvelazily ist aktiviert, um die Dateiauflösung zu verzögern, damit Ausnahmen der Dateigröße in der Uploadaktion gefangen werden können
Seitenkonfiguration
Fügen Sie der Form der Seite Enctpe = "Multipart/Form-Data" hinzu
<form id = "" name = "" method = "post" action = "" engType = "MultiPart/Form-Data">
Setzen Sie EncTTEpe = "Multipart/Form-Data" im Formular-Tag, um die korrekte Codierung der anonymen hochgeladene Datei zu gewährleisten.
Es ist die Mime -Codierung der Form. Standardmäßig ist dieses Codierungsformat die Anwendung/x-www-form-urlencoded, die nicht für das Datei-Upload verwendet werden kann. Nur durch Verwendung von Mehrfach-/Formdaten können die Dateidaten vollständig übergeben und die folgenden Vorgänge ausgeführt werden. EncType = "Multipart/Form-Data" soll Binärdaten hochladen. Der Eingangswert in Form wird in zweistelliger Weise übergeben, sodass die Anforderung den Wert nicht erhalten kann.
Upload -Steuerklasse schreiben
Schreiben Sie eine Upload -Methode, und hier wird kein Ergebnis zurückgegeben. Wenn Sie zur Seite springen oder andere Werte zurücksenden müssen, können Sie Leere in Zeichenfolge, MAP <String, Objekt> und andere Werte ändern und dann zurückkehren, um das Ergebnis zurückzugeben.
/** * upload * @param request * @return */@ResponseBody @RequestMapping (value = "/Upload", method = {RequestMethod.get, RequestMethod.post}) public void void Upload (httpServletReTReTRection) {multipartTtpRetRequest) {multiparttpLeTRETREQUETREQUEST) (multipartTpRetReTReTReque -Anfrage; MultiPartFile -Datei = multipArtrequest.getFile ("Datei"); // Datei ist der Name des Seite der Seite Eingabe string basepath = "Dateipfad" try {multipartresolver resolver = new commonsMultipartresolver (request.getSession (). GetVletContext ()); if (Resolver.ismultiPart (Anfrage)) {String fileStoredPath = "Ordnerpfad"; // zufällig generierte Dateiname String randomName = stringutil.getRandomFileName (); String uploadFileName = file.getOriginalFileName (); if (stringutils.isnotblank (UploadFileName)) {// Abfangen des Dateiformatnamens String -Suffix = UploadFileName.substring (UploadFileName.indexof (".")); // den Dateinamen String neu zusammenbauen newfilename = randomName + suffix; String SavePath = Basepath + "/" + Newfilename; Datei SaveFile = New Datei (SAREPADE); Datei ParentFile = SaveFile.getParentFile (); if (saveFile.exists ()) {SaveFile.delete (); } else {if (! parentFile.exists ()) {parentFile.mkdirs (); }} // die Datei in die angegebenen Path -FileUtils.copyInputStreamToFile (Datei.getInputStream (), SaveFile) kopieren; // Laden Sie die Datei auf den Server ftpclientUtil.upload (SaveFile, fileStoredPath) hoch; }}} catch (exception e) {e.printstacktrace (); }} FTP -Client -Upload -Tool
Paket com.yuananding.common.util; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren java.io.inputstream; importieren java.io.outputstream; importieren java.net.socketException; import Java.util.hashMap; import Java.util.map; Import Java.util.Properties; import org.apache.commons.lang.Stringutils; import org.apache.commons.net.ftp.ftp; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpreply; import org.slf4j.logger; import org.slf4j.loggerfactory; / *** FTP -Client -Tools*/ public class ftpclientUtil {/ *** log*/ private statische Finale logger logger = loggerfactory.getLogger (ftpclientUtil.class); / ** * FTP Server-Konfiguration-IP-Schlüssel, Wert ist Typ der Zeichenfolge */ public static final String server_ip = "server_ip"; / ** * FTP Server-Konfiguration-Portschlüssel, Wert ist Typ der Ganzzahl */ public static Final String server_port = "server_port"; / ** * FTP Server-Konfiguration-Anonymous Protokoll in Schlüssel, Wert ist Typ des Booleschen */ public static Final String is_anonymous = "is_anonymous"; / ** * Benutzername des anonymen Protokolls in */ public static Final String anonymous_user_name = "Anonymous"; / ** * Kennwort des anonymen Protokolls in */ public static Final String anonymous_password = ""; / ** * FTP Server-Konfiguration-Log im Benutzernamen, der Wert ist Typ der String */ public static Final String user_name = "user_name"; / ** * FTP Server-Konfiguration-Log Kennwort, Wert ist Typ der Zeichenfolge */ public static Final String password = "Passwort"; / ** * FTP Server-Konfiguration-Pasv-Schlüssel, der Wert ist Typ des booleschen */ public static Final String is_pasv = "is_pasv"; /** * FTP Server-Konfiguration-Erledigungsverzeichnisschlüssel, Wert ist Typ der String, wenn Sie sich anmelden. Außerdem muss das WorkingDirectory * existieren, es kann nicht automatisch erstellt werden. Wenn nicht, wird die Datei im Heimverzeichnis des Benutzers hochgeladen. Wenn * nicht zugewiesen wird, wird "/" verwendet. */ public static Final String Working_Directory = "Working_Directory"; public static map <String, Objekt> servercfg = new Hashmap <String, Object> (); statische Eigenschaften Requisiten; static {logger.info ("Laden Sie die Datei ftp.Properties!"); prop = neue Eigenschaften (); try {InputStream fps = ftpclientUtil.class.getResourceAsStream ("/ftp.properties"); prop.load (fps); fps.close (); } catch (Ausnahme e) {logger.Error ("Ausnahme liest die ftp.properties -Datei!", E); } servercfg.put (ftpclientUtil.server_ip, values ("server_ip")); servercfg.put (ftpclientUtil.server_port, Integer.parseInt (values ("server_port")); servercfg.put (ftpclientUtil.user_name, values ("user_name")); servercfg.put (ftpclientUtil.password, values ("password")); Logger.info (string.ValueOf (servercfg)); } /*** Laden Sie eine Datei auf den FTP -Server hoch. * * @param servercfg: FTP -Server -Konfiguration * @param filePathToUPload: Pfad der Datei zum Hochladen * @param fileStedName: Der Name, um die ferngespeicherte Datei zu geben, null, "" und ein anderes leeres Wort ersetzt * durch den Dateinamen zum Upload * @throws ioException * @Throws SocKETExcept. filePathToUPload, String fileStoredName) löst SocketException, IOException {Upload (servercfg, neue Datei (FilePathToUPload), fileStoredName) aus; } /*** Laden Sie eine Datei auf den FTP -Server hoch. * * @param serverCfg : FTP server configuration * @param fileToUpload : file to upload * @param fileStoredName : the name to give the remote stored file, null, "" and other blank word will be replaced * by the file name to upload * @throws IOException * @throws SocketException */ public static final void upload(Map<String, Object> serverCfg, File fileToUpload, String fileStoredName) löst SocketException aus, iOException {if (! FileToUpload.Exists ()) {werfen Sie neue IllegalArgumentException ("Datei zum Hochladen nicht vorhanden:" + FileToUpload.getabsolutepath ()); } if (! FileToUPload.isfile ()) {neue IllegalArgumentException ("Datei zum Hochladen ist keine Datei:" + FileToUPload.getabsolutepath ()); } if (Stringutils.isblank ((String) servercfg.get (server_ip))) {neue IllegalArgumentException werfen ("Server_ip muss in der FTP -Serverkonfiguration enthalten sein."); } TransferFile (true, servercfg, FileToUPload, fileStoredName, null, null); } /** * Download a file from FTP server * * @param serverCfg : FTP server configuration * @param fileNameToDownload : file name to be downloaded * @param fileStoredPath : stored path of the downloaded file in local * @throws SocketException * @throws IOException */ public static final void download(Map<String, Object> serverCfg, String fileNameToDownload, String fileStoredPath) löst SocketException aus, ioException {if (stringutils.isblank (Filenametodownload)) {neue IllegalArgumentException ("Dateiname zum Herunterladen kann nicht leer sein"); } if (Stringutils.isblank (fileStoredPath)) {Neue IllegalArgumentException ("gespeicherter Pfad der heruntergeladenen Datei in lokaler Datei kann nicht leer sein."); } if (Stringutils.isblank ((String) servercfg.get (server_ip))) {neue IllegalArgumentException werfen ("Server_ip muss in der FTP -Serverkonfiguration enthalten sein."); } TransferFile (false, servercfg, null, null, filenametodownload, fileStoredPath); } private statische endgültige void Transferfile (boolean isUpload, map <String, Objekt> Servercfg, Datei FileToUnLoad, String ServerFileToredName, String FilenAmetOwnLoad, String localFileToredPath) löst SocketException, IOException {String host = (String) servercfg.get (Server_ip); Integer port = (Integer) servercfg.get (server_port); Boolean isanonymous = (boolean) servercfg.get (is_anonymous); String username = (String) servercfg.get (user_name); String password = (String) servercfg.get (Passwort); Boolean ispasv = (boolean) servercfg.get (IS_PASV); String WorkingDirectory = (String) servercfg.get (Working_Directory); Ftpclient ftpclient = new ftpclient (); InputStream FileIn = null; OutputStream Fileout = null; try {if (port == null) {logger.debug ("Verbindung zum FTP -Server auf" + host + ":" + ftp.default_port); ftpclient.connect (Host); } else {logger.debug ("Verbindung zum FTP -Server auf" + host + ":" + port); ftpclient.connect (Host, Port); } int Reply = ftpclient.getReplyCode (); if (! ftpreply.ispositiveCompletion (Antwort)) {logger.Error ("FTP Server lehnt die Verbindung ab"); zurückkehren; } if (isanonymous! = null && isanonymous) {userername = anonymous_user_name; password = anonymous_password; } Logger.debug ("FTP -Server anmelden mit userername =" + userername + ", password =" + password); if (! ftpclient.login (Benutzername, Passwort)) {logger.Error ("Melden Sie sich nicht mit dem FTP -Server mit username =" + username + ", password =" + Passwort an); ftpclient.logout (); zurückkehren; } // Hier verwenden wir den binären Modus als Übertragungs -Dateityp, // ASCII -Modus wird nicht unterstützt. Logger.debug ("Setzen Sie den Typ der Datei fest, das zu binär hochgeladen werden soll."); ftpclient.setFiletype (ftp.Binary_file_type); if (ispasv! ftpclient.enterLocalPassivemode (); } else {logger.debug ("Verwenden Sie den aktiven Modus, um die Datei zu übertragen."); ftpclient.enterLocalactivemode (); } if (Stringutils.isblank (WorkingDirectory)) {WorkingDirectory = "/"; } Logger.debug ("Aktuelles Arbeitsverzeichnis ändern in" + WorkingDirectory); Änderung der Arbeit des Verzeichnisses (ftpclient, WorkingDirectory); if (isUpload) {// hochladen if (stringutils.isblank (serverFileStoredName)) {ServerFileStoredName = FileToUpload.getName (); } fileIn = new FileInputStream (FileToUPload); Logger.debug ("Datei hochladen:" + fileToUPload.getabSolutepath () + "zu FTP -Server mit Namen:" + serverFileStoredName); if (! ftpclient.storefile (serverFileStoredName, FileIn)) {logger.Error ("Datei nicht hochladen", + ftpclient.getReprystring ()); } else {logger.debug ("Erfolg zum Hochladen von Dateien"); }} else {// download // stellen Sie sicher, dass das Dateiverzeichnis Datei fileSteored = neue Datei (LocalFileToredPath) existiert; if (! fileStored.getParentFile (). exists ()) {fileStored.getParentFile (). mkdirs (); } FileOut = new FileOutputStream (fileStored); Logger.debug ("Datei herunterladen:" + filenametodownload + "vom FTP -Server zu lokal:" + localFileToredPath); if (! ftpclient.retrieveFile (FilenAmetodownload, FileOut)) {logger.Error ("Datei nicht herunterladen", + ftpclient.getReprystring ()); } else {logger.debug ("Erfolg zum Herunterladen von Dateien"); }} ftpclient.noop (); ftpclient.logout (); } endlich {if (ftpclient.isconnected ()) {try {ftpclient.disconnect (); } catch (ioException f) {}} if (fileIn! = null) {try {FileIn.close (); } catch (ioException e) {}} if (filout! = null) {try {filout.close (); } catch (ioException e) {}}} private statische endgültige boolesche Veränderung der Verhandlung (ftpclient ftpclient, String WorkingDirectory) löst ioException {if (! ftpclient.changeWorkingDirectory (WorkingDirectory)) {] paths [] paths = arbeite. für (int i = 0; i <paths.length; i ++) {if (! ". ftpclient.ChangeworkingDirectory (Pfade [i]); }}} return true; } public static endgültiger void Upload (MAP <String, Objekt> Servercfg, String filePathToUnload, String fileStoredPath, String fileStoredName) löscht SocketException, ioException {upload (Servercfg, neuer Datei (filePathToUnload), fileSequeredPort, fileRestoredName); } public static endgültiger void Upload (MAP <String, Object> Servercfg, Dateifiletopplade, String fileStoredPath, String fileESToredName) löscht SocketException, ioException {if (fileStoredPath! = null &&! ". } Upload (servercfg, FileToUPload, fileStoredName); } public static endgültiger void Upload (String filePathToUpload, String fileStoredPath) löscht SocketException, IOException {Upload (Servercfg, filepathtoppload, fileStoredPath, ""); } public static endgültiger void -Upload (Dateifiletopplade, String fileStoredPath) löscht SocketException, IOException {Upload (Servercfg, FileToUPload, fileStoredPath, ""); } public static String -Werte (String -Schlüssel) {String value = prop.getProperty (Schlüssel); if (value! = null) {Rückgabewert; } else {return null; }}} ftp.properties
#Server adresse server_ip = 192.168.1.1 #server pORP server_port = 21 #Account Name user_name = userftp #password #password = passwordpe
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.