Nginx derleme görüntü sunucusu

  • Bu bölümdeki bilgi noktaları
  • ünite testi
  • Maven'in Web projesi
  • Proje çekirdek yapılandırma dosyası
  • Hizmet katmanı
  • Denetleyici katmanı
  • Görünüm katmanı
  • sonuç olarak

Bu bölümün içeriği, Nginx ve FTP aracılığıyla bir resim sunucusu oluşturur. Bu bölümün içeriğini incelemeden önce, lütfen Linux sisteminize Nginx ve Vsftpd'nin kurulu olduğundan emin olun.

Nginx kurulumu

Vsftpd kurulumu

Bu bölümdeki bilgi noktaları

Efekt resmi:

  • Gereksinimler: yükleme ve toplu yükleme işlemlerini gerçekleştirin
  • Teknoloji: Nginx, Vsftpd, Spring, SpringMVC, KindEditor, CentOS
  • Not: Bu bölümün içeriği esas olarak resim yükleme işlevini gerçekleştirmektir. KindEditer, resimleri yüklemenin, yankılamanın ve gruplamanın etkisini daha iyi göstermek için kullanılır. Arka plan kodu doğrudan KindEditer ile ilgili değildir, lütfen okumaktan çekinmeyin. Ek olarak, kaynak kodda Mybatis kavanozu bulunmaktadır, bunun için endişelenmeyin.Bu bölümün içeriği kullanılmamaktadır, takip içeriği içindir!
  • Kaynak kodu: makalenin altına bakın
  • Senaryo: Kullanıcı resmi tomcat sunucusuna yükler ve ardından tomcat sunucusu bunu FTP yoluyla Nginx sunucusuna yükler.

Proje yapısı:

ünite testi

İlk olarak, çekirdek teknolojiyi kırmalıyız. Birim testi yoluyla görüntü yükleme işlevini gerçekleştirin.

paket com.itdragon.test; java.io.File içe aktarma; java.io.FileInputStream'i içe aktarın; org.apache.commons.net.ftp.FTP içe aktarımı; org.apache.commons.net.ftp.FTPClient içe aktarımı; org.junit.Test'i içe aktar; public class PictureFTPTest { // ftp yükleme resim işlevini test edin @Ölçek public void testFtpClient (), Exception { // 1. Bir FtpClient nesnesi oluşturun FTPClient ftpClient = yeni FTPClient (); // 2. ftp bağlantısı oluştur ftpClient.connect ("192.168.0.11", 21); // 3. ftp sunucusunda oturum açın ftpClient.login ("ftpuser", "kök"); // 4. Yerel dosyayı okuyun FileInputStream inputStream = new FileInputStream (yeni Dosya ("F: \ merhaba.png")); // 5. Yükleme yolunu ayarlayın ftpClient.changeWorkingDirectory ("/ usr / local / nginx / html / images"); // 6. Yüklenen dosyanın formatını ikili olarak değiştirin ftpClient.setFileType (FTP.BINARY_FILE_TYPE); // 7. Sunucu dosyaları depolar, ilk parametre sunucuda depolanan dosya adı ve ikinci parametre dosya akışıdır ftpClient.storeFile ("merhaba.jpg", inputStream); // 8. Bağlantıyı kapatın ftpClient.logout (); } }

Not: ip adresi, bağlantı noktası, ftp kullanıcı adı, şifre, yerel dosya yolu ve Nginx sunucusu görüntü yolu vb., Bu dize parametreleri gerçek ayarlarınıza göre doldurulmalıdır. Nginx ve Vsftpd kurulumunuz verdiğim bağlantıya göre yapılırsa. O zaman sadece ip adresini değiştirmeniz gerekir.

Maven'in Web projesi

Bir Maven Web projesi kurun, daha önce yazmıştım. Burada çok fazla açıklama yok.

Proje çekirdek yapılandırma dosyası

İlki, Maven'in pom.xml çekirdek dosyasıdır.

< proje xmlns = " xmlns: xsi = " xsi: schemaLocation = " > < modelVersion > 4.0.0 < / modelVersion > < Grup kimliği > com.itdragon.upload < /Grup kimliği > < artifactId > pictrue-hizmeti < / artifactId > < versiyon > 0.0.1-SNAPSHOT < / version > < ambalaj > savaş < / paketleme > < ! - Bağımlılık sürüm numaralarını merkezi olarak tanımlayın - > < özellikleri > < junit.version > 4.12 < /junit.version > < spring.version > 4.1.3. YAYIN < /spring.version > < mybatis.version > 3.2.8 < /mybatis.version > < mybatis.spring.version > 1.2.2 < /mybatis.spring.version > < mybatis.paginator.version > 1.2.15 < /mybatis.paginator.version > < mysql.version > 5.1.6 < /mysql.version > < slf4j.version > 1.6.4 < /slf4j.version > < jackson.version > 2.4.2 < /jackson.version > < druid.version > 1.0.9 < /druid.version > < httpclient.version > 4.3.5 < /httpclient.version > < jstl.version > 1.2 < /jstl.version > < servlet-api.version > 2.5 < /servlet-api.version > < jsp-api.version > 2.0 < /jsp-api.version > < joda-time.version > 2.5 < /joda-time.version > < commons-lang3.version > 3.3.2 < /commons-lang3.version > < commons-io.version > 1.3.2 < /commons-io.version > < commons-net.version > 3.3 < /commons-net.version > < pagehelper.version > 3.4.2 < /pagehelper.version > < jsqlparser.version > 0.9.1 < /jsqlparser.version > < commons-fileupload.version > 1.3.1 < /commons-fileupload.version > < jedis.version > 2.7.2 < /jedis.version > < solrj.version > 4.10.3 < /solrj.version > < /özellikleri > < bağımlılıklar > < ! - Zaman işlemi bileşeni - > < bağımlılık > < Grup kimliği > joda zamanı < /Grup kimliği > < artifactId > joda zamanı < / artifactId > < versiyon > $ {joda-time.version} < / version > < /bağımlılık > < ! - Apache aracı bileşenleri - > < bağımlılık > < Grup kimliği > org.apache.commons < /Grup kimliği > < artifactId > commons-lang3 < / artifactId > < versiyon > $ {commons-lang3.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > org.apache.commons < /Grup kimliği > < artifactId > ortak < / artifactId > < versiyon > $ {commons-io.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > ortak ağ < /Grup kimliği > < artifactId > ortak ağ < / artifactId > < versiyon > $ {commons-net.version} < / version > < /bağımlılık > < ! - Jackson Json İşleme Araç Seti - > < bağımlılık > < Grup kimliği > com.fasterxml.jackson.core < /Grup kimliği > < artifactId > jackson-databind < / artifactId > < versiyon > $ {jackson.version} < / version > < /bağımlılık > < ! - httpclient - > < bağımlılık > < Grup kimliği > org.apache.httpcomponents < /Grup kimliği > < artifactId > httpclient < / artifactId > < versiyon > $ {httpclient.version} < / version > < /bağımlılık > < !-- ünite testi -- > < bağımlılık > < Grup kimliği > Junit < /Grup kimliği > < artifactId > Junit < / artifactId > < versiyon > $ {junit.version} < / version > < dürbün > Ölçek < /dürbün > < /bağımlılık > < ! - Günlük işleme - > < bağımlılık > < Grup kimliği > org.slf4j < /Grup kimliği > < artifactId > slf4j-log4j12 < / artifactId > < versiyon > $ {slf4j.version} < / version > < /bağımlılık > < ! - Mybatis - > < bağımlılık > < Grup kimliği > org.mybatis < /Grup kimliği > < artifactId > mybatis < / artifactId > < versiyon > $ {mybatis.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > org.mybatis < /Grup kimliği > < artifactId > mybatis-bahar < / artifactId > < versiyon > $ {mybatis.spring.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > com.github.miemiedev < /Grup kimliği > < artifactId > mybatis-paginator < / artifactId > < versiyon > $ {mybatis.paginator.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > com.github.pagehelper < /Grup kimliği > < artifactId > pagehelper < / artifactId > < versiyon > $ {pagehelper.version} < / version > < /bağımlılık > < ! - MySql - > < bağımlılık > < Grup kimliği > mysql < /Grup kimliği > < artifactId > mysql-bağlayıcı-java < / artifactId > < versiyon > $ {mysql.version} < / version > < /bağımlılık > < ! - bağlantı havuzu - > < bağımlılık > < Grup kimliği > com.alibaba < /Grup kimliği > < artifactId > Druid < / artifactId > < versiyon > $ {druid.version} < / version > < /bağımlılık > < ! - İlkbahar - > < bağımlılık > < Grup kimliği > org.springframework < /Grup kimliği > < artifactId > bahar bağlamı < / artifactId > < versiyon > $ {spring.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > org.springframework < /Grup kimliği > < artifactId > taze fasulye < / artifactId > < versiyon > $ {spring.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > org.springframework < /Grup kimliği > < artifactId > Spring-webmvc < / artifactId > < versiyon > $ {spring.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > org.springframework < /Grup kimliği > < artifactId > bahar-jdbc < / artifactId > < versiyon > $ {spring.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > org.springframework < /Grup kimliği > < artifactId > bahar yönleri < / artifactId > < versiyon > $ {spring.version} < / version > < /bağımlılık > < ! - JSP ile ilgili - > < bağımlılık > < Grup kimliği > jstl < /Grup kimliği > < artifactId > jstl < / artifactId > < versiyon > $ {jstl.version} < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > javax.servlet < /Grup kimliği > < artifactId > servlet-api < / artifactId > < versiyon > $ {servlet-api.version} < / version > < dürbün > sağlanan < /dürbün > < /bağımlılık > < bağımlılık > < Grup kimliği > javax.servlet < /Grup kimliği > < artifactId > jsp-api < / artifactId > < versiyon > $ {jsp-api.version} < / version > < dürbün > sağlanan < /dürbün > < /bağımlılık > < ! - Dosya yükleme bileşeni - > < bağımlılık > < Grup kimliği > ortak dosya yükleme < /Grup kimliği > < artifactId > ortak dosya yükleme < / artifactId > < versiyon > $ {commons-fileupload.version} < / version > < /bağımlılık > < ! - Redis istemcisi - > < bağımlılık > < Grup kimliği > redis.clients < /Grup kimliği > < artifactId > Jedis < / artifactId > < versiyon > $ {jedis.version} < / version > < /bağımlılık > < ! - solr istemcisi - > < bağımlılık > < Grup kimliği > org.apache.solr < /Grup kimliği > < artifactId > solr-solrj < / artifactId > < versiyon > $ {solrj.version} < / version > < /bağımlılık > < / bağımlılıklar > < inşa etmek > < finalName > $ {project.artifactId} < / finalName > < eklentiler > < ! - Kaynak dosyası kopyalama eklentisi - > < Eklenti > < Grup kimliği > org.apache.maven.plugins < /Grup kimliği > < artifactId > maven-kaynaklar-eklentisi < / artifactId > < versiyon > 2.7 < / version > < konfigürasyon > < kodlama > UTF-8 < / kodlama > < / configuration > < /Eklenti > < ! - java derleme eklentisi - > < Eklenti > < Grup kimliği > org.apache.maven.plugins < /Grup kimliği > < artifactId > maven-derleyici eklentisi < / artifactId > < versiyon > 3.2 < / version > < konfigürasyon > < kaynak > 1.7 < /kaynak > < hedef > 1.7 < /hedef > < kodlama > UTF-8 < / kodlama > < / configuration > < /Eklenti > < / plugins > < pluginManagement > < eklentiler > < ! - Tomcat eklentisini yapılandırın - > < Eklenti > < Grup kimliği > org.apache.tomcat.maven < /Grup kimliği > < artifactId > tomcat7-maven-eklentisi < / artifactId > < versiyon > 2.2 < / version > < /Eklenti > < / plugins > < / pluginYönetim > < /inşa etmek > < / proje >

Not: Dosya yüklemeyle doğrudan ilgili olan şey şudur:

< bağımlılık > < Grup kimliği > ortak dosya yükleme < /Grup kimliği > < artifactId > ortak dosya yükleme < / artifactId > < /bağımlılık >

Ardından Web projesinin çekirdek dosyası web.xml var

< ? xml version = "1.0" encoding = "UTF-8"? > < web uygulaması xmlns: xsi = " xmlns = " xmlns: web = " xsi: schemaLocation = " id = "taotao" version = "2.5" > < ekran adı > pictrue-hizmeti < /ekran adı > < ! - Yükleme yay konteyneri - > < bağlam parametresi > < param-adı > contextConfigLocation < / param-adı > < param-değeri > sınıf yolu: yay / uygulamaContext - *. xml < / param-değeri > < / context-param > < dinleyici > < dinleyici sınıfı > org.springframework.web.context.ContextLoaderListener < / dinleyici sınıfı > < / dinleyici > < ! - Yazı bozuk kodunu çöz - > < filtre > < filtre adı > CharacterEncodingFilter < / filtre-adı > < filtre sınıfı > org.springframework.web.filter.CharacterEncodingFilter < / filtre sınıfı > < init-param > < param-adı > kodlama < / param-adı > < param-değeri > utf-8 < / param-değeri > < / init-param > < / filtre > < filtre eşleme > < filtre adı > CharacterEncodingFilter < / filtre-adı > < url kalıbı > / * < / url kalıbı > < / filter-mapping > < ! - springmvc'nin ön denetleyicisi - > < servlet > < servlet-adı > pictrue-hizmeti < / servlet-adı > < servlet sınıfı > org.springframework.web.servlet.DispatcherServlet < / servlet-sınıfı > < init-param > < param-adı > contextConfigLocation < / param-adı > < param-değeri > sınıf yolu: yay / springmvc.xml < / param-değeri > < / init-param > < başlangıçta yükleme > 1 < / başlangıçta yükleme > < / servlet > < sunucu uygulaması eşleme > < servlet-adı > pictrue-hizmeti < / servlet-adı > < url kalıbı > / < / url kalıbı > < / servlet-mapping > < /internet uygulaması >

Sonra SpringMVC yapılandırma dosyası springmvc.xml var, bir dosya yükleme ayrıştırıcısı eklemeniz gerekiyor

< ! - Dosya yükleme ayrıştırıcısını tanımlayın - > < bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" > < ! - Varsayılan kodlamayı ayarlayın - > < property name = "defaultEncoding" value = "UTF-8" > < /Emlak > < ! - Maksimum dosya yükleme boyutunu 5MB, 5 * 1024 * 1024 - > < özellik adı = "maxUploadSize" value = "5242880" > < /Emlak > < /fasulye >

Son olarak, Ftp yapılandırma dosyası resource.properties

FTP_ADDRESS = 192.168.0.11 FTP_PORT = 21 FTP_USERNAME = ftpuser FTP_PASSWORD = kök FTP_BASE_PATH = / usr / local / nginx / html / images IMAGE_BASE_URL = http: //192.168.0.11/images

Hizmet katmanı

Resim yükleme arayüzü PictureService.java

paket com.itdragon.service; java.util.Map içe aktarın; import org.springframework.web.multipart.MultipartFile; genel arayüz PictureService { / ** * Yükleme, toplu yükleme arayüzü * @param uploadFile * @dönüş * / Map uploadPicture (MultipartFile uploadFile); }

Resim arabirimi uygulama sınıfını yükle PictureServiceImpl.java

paket com.itdragon.service.impl; java.io.IOException ithalatı; java.io.InputStream'i içe aktarın; java.util.HashMap'i içe aktar; java.util.Map içe aktarın; org.apache.commons.net.ftp.FTP içe aktarımı; org.apache.commons.net.ftp.FTPClient içe aktarımı; org.apache.commons.net.ftp.FTPReply dosyasını içe aktarın; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import com.itdragon.service.PictureService; @Hizmet @SuppressWarnings ({"rawtypes", "unchecked"}) public class PictureServiceImpl, PictureService'i uygular { // Yapılandırma dosyasındaki özellik değerini Spring4'ün Değer ek açıklamasıyla alın @Value ("$ {FTP_ADDRESS}") private String FTP_ADDRESS; // ftp sunucusu ip adresi @Value ("$ {FTP_PORT}") private Integer FTP_PORT; // ftp sunucu bağlantı noktası, varsayılan 21'dir @Value ("$ {FTP_USERNAME}") private String FTP_USERNAME; // ftp sunucusu kullanıcı adı @Value ("$ {FTP_PASSWORD}") private String FTP_PASSWORD; // ftp sunucu şifresi @Value ("$ {FTP_BASE_PATH}") private String FTP_BASE_PATH; // Resimleri saklamak için ftp sunucusunun mutlak yolu @ Değer ("$ {IMAGE_BASE_URL}") private String IMAGE_BASE_URL; // ftp sunucusu harici ağ erişimi resim yolu @Override public Map uploadPicture (MultipartFile uploadFile) { Harita resultMap = yeni HashMap < > (); Deneyin { // 1. Orijinal dosya adını alın String oldName = uploadFile.getOriginalFilename (); // 2. ftp sunucusunun dosya adı String newName = oldName; //resmi yükle boole sonucu = uploadFile (FTP_ADDRESS, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, uploadFile.getInputStream (), FTP_BASE_PATH, newName); // Sonuç döndür eğer (! sonuç) { resultMap.put ("hata", 1); resultMap.put ("mesaj", "Yükleme Başarısız"); return resultMap; } resultMap.put ("hata", 0); resultMap.put ("url", IMAGE_BASE_URL + "/" + newName); return resultMap; } catch (İstisna e) { e.printStackTrace (); resultMap.put ("hata", 1); resultMap.put ("mesaj", "Yükleme Başarısız"); return resultMap; } } / ** * ftp resim yükleme yöntemi * @param ip ftp sunucusu ip adresi * @param port ftp server port, varsayılan 21'dir * @param hesabı ftp sunucusu kullanıcı adı * @param passwd ftp sunucu şifresi * @param inputStream dosya akışı * @param workingDir ftp sunucusunun resimleri depolamak için mutlak yolu * @param fileName ftp sunucusu dosya adına yükleme * @throws Exception * * / public boolean uploadFile (String ip, Integer port, String hesabı, String passwd, InputStream inputStream, String workingDir, String fileName) Exception { boole sonucu = yanlış; // 1. Bir FtpClient nesnesi oluşturun FTPClient ftpClient = yeni FTPClient (); Deneyin { // 2. ftp bağlantısı oluştur ftpClient.connect (ip, bağlantı noktası); // 3. ftp sunucusunda oturum açın ftpClient.login (hesap, passwd); int response = ftpClient.getReplyCode (); // Bağlantı ftp durumu dönüş değerini alın System.out.println ("kod:" + yanıt); if (! FTPReply.isPositiveCompletion (yanıt)) { ftpClient.disconnect (); // Dönüş durumu artık 200 ~ 300 değilse, bağlantının başarısız olduğu kabul edilir dönüş sonucu; } // 4. Yerel dosyayı okuyun // FileInputStream inputStream = new FileInputStream (yeni Dosya ("F: \ hello.png")); // 5. Yükleme yolunu ayarlayın ftpClient.changeWorkingDirectory (workingDir); // 6. Yüklenen dosyanın formatını ikili olarak değiştirin ftpClient.setFileType (FTP.BINARY_FILE_TYPE); // 7. Sunucu dosyaları depolar, ilk parametre sunucuda depolanan dosya adı ve ikinci parametre dosya akışıdır eğer (! ftpClient.storeFile (fileName, inputStream)) { dönüş sonucu; } // 8. Bağlantıyı kapatın inputStream.close (); ftpClient.logout (); sonuç = doğru; } catch (İstisna e) { e.printStackTrace (); }en sonunda { // FIXME Projedeki istisnaları yakalamak için en iyisinin try catch daha az kullanmak olduğunu duydum. Bu Spring işlemi geri alma sorunlarına neden olur? ? ? Daha önce yazılan kod sahte kod mu? ! ! if (ftpClient.isConnected ()) { Deneyin { ftpClient.disconnect (); } catch (IOException ioe) { } } } dönüş sonucu; } }

Açıklama:

  • @Value ek açıklaması Spring4'te sağlanır, @Value ("$ {XXX}")
  • Dönüş değeri bir Haritadır ve anahtarda hata, url ve mesaj vardır. Bu, KindEditer'in gramer gereksinimlerine dayanmaktadır. Ayrıntılar için bağlantıya bakın.

Denetleyici katmanı

Sayfa atlamasından sorumlu PageController.java

paket com.itdragon.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Kontroller public class PageController { / ** * Ana sayfayı açın * / @RequestMapping ("/") public String showIndex () { "indeks" döndür; } @RequestMapping ("/ {page}") public String showpage (@PathVariable String sayfası) { System.out.println ("sayfa:" + sayfa); dönüş sayfası; } }

Resim yüklemesinden sorumlu PictureController.java

paket com.itdragon.controller; java.util.Map içe aktarın; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.itdragon.service.PictureService; @Filmdenkare public class PictureController { @Autowired özel PictureService pictureService; @RequestMapping ("resim / yükleme") public String pictureUpload (@RequestParam (value = "fileUpload") MultipartFile uploadFile) { Dize json = ""; Deneyin { Harita sonucu = pictureService.uploadPicture (uploadFile); // Tarayıcılar json formatındaki dizeleri işlemekte iyidir. Farklı tarayıcı çekirdeklerinin neden olduğu hataları azaltmak için json önerilir json = new ObjectMapper (). writeValueAsString (sonuç); } catch (JsonProcessingException e) { e.printStackTrace (); } json döndür; } }

Açıklama:

  • @RestController, @Controller + @ResponseBody ek açıklamasının bir kombinasyonu olan Spring4 tarafından da sağlanır.
  • Controller katmanının dönüş değeri, json formatında bir dizedir. Bunun nedeni tarayıcının json ayrıştırma ile daha iyi uyumluluğudur.

Görünüm katmanı

Resimlerin yüklenmesinden sorumlu jsp sayfası pic-upload.jsp

< % @ page language = "java" contentType = "text / html; UTF-8" pageEncoding = "UTF-8"% > < ! DOCTYPE html > < html > < baş > < meta http-equiv = "İçerik Türü" content = "text / html; charset = UTF-8" > < Başlık > ITDragon resim yükleme < /Başlık > < / kafa > < link href = "/ js / kindeditor-4.1.10 / temalar / default / default.css" type = "text / css" rel = "stylesheet" > < script type = "text / javascript" src = "js / jquery.min.js" > < /senaryo > < script type = "text / javascript" charset = "utf-8" src = "/ js / kindeditor-4.1.10 / kindeditor-all-min.js" > < /senaryo > < script type = "text / javascript" charset = "utf-8" src = "/ js / kindeditor-4.1.10 / lang / zh_CN.js" > < /senaryo > < / kafa > < vücut > < h3 > Görüntü yükleme işlevi arayüzünün form formunu test edin < / h3 > < form eylem = "resim / yükleme" method = "post" enctype = "multipart / form-data" > < input type = "file" name = "fileUpload" / > < input type = "submit" value = "Dosya yükle" / > < /form > < hr / > < h3 > Resimlerin toplu olarak yüklenmesini gerçekleştirmek için KindEditor zengin metin düzenleyicisini ödünç alın < / h3 > < textarea id = "kindEditorDesc" style = "genişlik: 800px; yükseklik: 300px; görünürlük: gizli;" > < / textarea > < script type = "text / javascript" > $ (işlev () { // Zengin metin düzenleyiciyi başlatın KindEditor.create ("# kindEditorDesc", { // İsim değeri Kontrolörün parametrelerine karşılık gelmelidir, aksi takdirde 400 hatası istenir filePostName: "fileUpload", // eylem değeri, uploadJson: '/ pic / upload', // Görüntü, flash, medya, dosya sırasıyla yükleme türünü ayarlayın dir: "resim" }); }); < /senaryo > < /vücut > < / html >

Not: pic-upload.jsp iki bölüme ayrılmıştır, ilk bölüm resim yüklemek için form formunun test edilmesidir. İkinci bölüm, daha iyi bir deneyim için yükleme, toplu yükleme ve yankı işlevlerine sahip KindEditer zengin metin düzenleyicisidir.

sonuç olarak

  • Nginx bir sunucu oluşturmayı düşünüyor
  • Java, Ftp'ye resim yükleme işlevini uygular
  • KindEditer resim yükleme işlevi

Kaynak kodu: https://github.com/ITDragonBlog/daydayup/tree/master/Nginx

Nginx buradaki resim sunucusu yapısının sonudur, herhangi bir eksiklik varsa lütfen beni aydınlatın. İyi olduğunu düşünüyorsanız, beğenebilirsiniz!

Kaynak:

WeChat Kimliğini (ID: Taro Kaynak Kodu) arayarak, çeşitli Java kaynak kodu analizleri alabilirsiniz.

Ayrıca, [Kitaplar] 'a yanıt verdikten sonra, girişten mimariye kadar yazarın önerdiği çeşitli Java kitapları alabilirsiniz.

Hadi, Sao Nian ~

Tanrıça hasatçısı olarak bilinir! 31 yaşındaki TVB, Xiaosheng'i yeni dramla skandalı kızdırmaya çağırdı
önceki
Bu yaz öldürecek en güçlü anı! NIKE Shox Gravity "Dünya Kupası" özel renk eşleştirme ile çıkıyor!
Sonraki
Chery Arrizo 5e 450 mağazaya geldi ve Eylül ayında piyasaya sürülmesi bekleniyor
Hızlı trende hazır erişte yiyen adam bir abla tarafından kızdırıldı! Ne düşünüyorsun?
Patlamak! 55 yaşındaki güzel Wutaishan baharı on üç anne evde aniden öldü, vücudunun kokuşmuş olduğu ortaya çıktı.
Trendler Panosu | Bu hafta sonu üniversiteye giriş sınavından sonra zihninizi tazelemek için "Baharatlı Tavuk" a güvenin ~
Mikro İşe Alım Dünya çok büyük! Cibuti sizi görmeye çağırıyor!
GÖSTER ZAMANI İşte sizi bekleyen tatlı ve tuzlu kardeşler dalgası!
ÖzelYeni Medya Merkezi İşletmeler İkincil Hesap Endeksi (Aralık 2016)
BMW boşta değil: aküyü ve otonom sürüş araştırma ve geliştirme maliyetlerini düşürüyor
Alan satın almak için kitle fonlaması mı yapıyorsunuz? Off-White x NIKE "HOME FIELD" sahası da ortaya çıktı!
Eski ATV Huadan, üç yılda altı dizi çekmek için Wireless'a katıldı
Yeni BMW 3 Serisi Travel Edition'ın yol testi fotoğrafları önümüzdeki yılın başlarında piyasaya sürülebilir
Muhteşem ve güzel! Mercekteki buharlı lokomotif, bir asırlık Çin demiryolunun özü
To Top