1.nginx安裝及設定
小編使用的伺服器是阿里雲的輕量應用伺服器,系統使用的是ubuntu。注意記得開放 9090tcp端口,如果不使用 9090端口作為伺服器端口也可不用。
安裝
首先,取得安裝包是必要的吧,這裡提供一個nginx-1.11.3-ubuntu.tar.gz https://pan.baidu .com/s/1vvb41qkoj4vqfyfckxbkja (密碼45wz)
小編是將安裝套件放在/usr/nginx 中,進入目錄下然後執行 tar -zxvf nginx-1.11.3.tar.gz
進行解壓縮
配置
修改/usr/nginx/conf/nginx.conf :
server { listen 9090; server_name localhost; location ~ .(jpg|png|jpeg|gif|bmp)$ { #可识别的文件后缀 root /usr/nginx/image/; #图片的映射路径 autoindex on; #开启自动索引 expires 1h; #过期时间 } location ~ .(css|js)$ { root /usr/nginx/static/; autoindex on; expires 1h; } location ~ .(avi|mov|rmvb|rm|flv|mp4|3gp)$ { root /usr/nginx/video/; autoindex on; expires 1h; }
該修改的修改,該增加的增加,切記勿亂刪
最後一步,啟動nginx,執行./usr/nginx/sbin/nginx
到這裡伺服器nginx就準備可以了
你可以試試在/usr/nginx/image 下放圖片01.jpg,然後在本地 看看圖片能否存取到
2. springboot 實作資源的上傳
#pom.xml:
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.7.release</version> </parent> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <version>2.1.7.release</version> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <version>2.1.7.release</version> <scope>test</scope> </dependency> <!-- apache工具组件 --> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-lang3</artifactid> <version>3.8.1</version> </dependency> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-io</artifactid> <version>1.3.2</version> </dependency> <dependency> <groupid>commons-net</groupid> <artifactid>commons-net</artifactid> <version>3.6</version> </dependency> <!-- 文件上传组件 --> <dependency> <groupid>commons-fileupload</groupid> <artifactid>commons-fileupload</artifactid> <version>1.3.3</version> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.16.22</version> </dependency> <dependency> <groupid>com.jcraft</groupid> <artifactid>jsch</artifactid> <version>0.1.54</version> </dependency> <dependency> <groupid>joda-time</groupid> <artifactid>joda-time</artifactid> <version>2.10.3</version> </dependency> </dependencies>
appilcation.yml:
ftp: host: 自己服务器ip username: 服务器账号 password: 服务器密码 port: 22 rootpath: /usr/nginx/image img: url: http://ip:9090/ # ftp.img.url 可以不添加,这里只是为了上传文件成功后返回文件路径
工具類別ftputil.class:
import com.jcraft.jsch.*; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.value; import org.springframework.stereotype.component; import java.io.inputstream; import java.util.properties; @component public class ftputil { private static logger logger = loggerfactory.getlogger(ftputil.class); /** * ftp服务器ip地址 */ private static string host; @value("${ftp.host}") public void sethost(string val){ ftputil.host = val; } /** * 端口 */ private static int port; @value("${ftp.port}") public void setport(int val){ ftputil.port = val; } /** * 用户名 */ private static string username; @value("${ftp.username}") public void setusername(string val){ ftputil.username = val; } /** * 密码 */ private static string password; @value("${ftp.password}") public void setpassword(string val){ ftputil.password = val; } /** * 存放图片的根目录 */ private static string rootpath; @value("${ftp.rootpath}") public void setrootpath(string val){ ftputil.rootpath = val; } /** * 存放图片的路径 */ private static string imgurl; @value("${ftp.img.url}") public void setimgurl(string val){ ftputil.imgurl = val; } /** * 获取连接 */ private static channelsftp getchannel() throws exception{ jsch jsch = new jsch(); //->ssh root@host:port session sshsession = jsch.getsession(username,host,port); //密码 sshsession.setpassword(password); properties sshconfig = new properties(); sshconfig.put("stricthostkeychecking", "no"); sshsession.setconfig(sshconfig); sshsession.connect(); channel channel = sshsession.openchannel("sftp"); channel.connect(); return (channelsftp) channel; } /** * ftp上传图片 * @param inputstream 图片io流 * @param imagepath 路径,不存在就创建目录 * @param imagesname 图片名称 * @return urlstr 图片的存放路径 */ public static string putimages(inputstream inputstream, string imagepath, string imagesname){ try { channelsftp sftp = getchannel(); string path = rootpath + imagepath + "/"; createdir(path,sftp); //上传文件 sftp.put(inputstream, path + imagesname); logger.info("上传成功!"); sftp.quit(); sftp.exit(); //处理返回的路径 string resultfile; resultfile = imgurl + imagepath + imagesname; return resultfile; } catch (exception e) { logger.error("上传失败:" + e.getmessage()); } return ""; } /** * 创建目录 */ private static void createdir(string path,channelsftp sftp) throws sftpexception { string[] folders = path.split("/"); sftp.cd("/"); for ( string folder : folders ) { if ( folder.length() > 0 ) { try { sftp.cd( folder ); }catch ( sftpexception e ) { sftp.mkdir( folder ); sftp.cd( folder ); } } } } /** * 删除图片 */ public static void delimages(string imagesname){ try { channelsftp sftp = getchannel(); string path = rootpath + imagesname; sftp.rm(path); sftp.quit(); sftp.exit(); } catch (exception e) { e.printstacktrace(); } } }
工具類別idutils.class(修改上傳圖片名稱):
import java.util.random; public class idutils { /** * 生成随机图片名 */ public static string genimagename() { //取当前时间的长整形值包含毫秒 long millis = system.currenttimemillis(); //加上三位随机数 random random = new random(); int end3 = random.nextint(999); //如果不足三位前面补0 string str = millis + string.format("%03d", end3); return str; } }
nginxservice.class:
import com.wzy.util.ftputil; import com.wzy.util.idutils; import lombok.extern.slf4j.slf4j; import org.joda.time.datetime; import org.springframework.stereotype.service; import org.springframework.web.multipart.multipartfile; import java.io.ioexception; import java.io.inputstream; /** * @package: com.wzy.service * @author: clarence1 * @date: 2019/10/4 21:34 */ @service @slf4j public class nginxservice { public object uploadpicture(multipartfile uploadfile) { //1、给上传的图片生成新的文件名 //1.1获取原始文件名 string oldname = uploadfile.getoriginalfilename(); //1.2使用idutils工具类生成新的文件名,新文件名 = newname + 文件后缀 string newname = idutils.genimagename(); assert oldname != null; newname = newname + oldname.substring(oldname.lastindexof(".")); //1.3生成文件在服务器端存储的子目录 string filepath = new datetime().tostring("/yyyymmdd/"); //2、把图片上传到图片服务器 //2.1获取上传的io流 inputstream input = null; try { input = uploadfile.getinputstream(); } catch (ioexception e) { e.printstacktrace(); } //2.2调用ftputil工具类进行上传 return ftputil.putimages(input, filepath, newname); } }
nginxcontroller.class:
import com.fasterxml.jackson.core.jsonprocessingexception; import com.fasterxml.jackson.databind.objectmapper; import com.wzy.service.nginxservice; import lombok.extern.slf4j.slf4j; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.multipart.multipartfile; import java.util.hashmap; import java.util.map; @restcontroller @slf4j public class nginxcontroller { @autowired private nginxservice nginxservice; /** * 可上传图片、视频,只需在nginx配置中配置可识别的后缀 */ @postmapping("/upload") public string pictureupload(@requestparam(value = "file") multipartfile uploadfile) { long begin = system.currenttimemillis(); string json = ""; try { object result = nginxservice.uploadpicture(uploadfile); json = new objectmapper().writevalueasstring(result); } catch (jsonprocessingexception e) { e.printstacktrace(); } long end = system.currenttimemillis(); log.info("任务结束,共耗时:[" + (end-begin) + "]毫秒"); return json; } @postmapping("/uploads") public object picturesupload(@requestparam(value = "file") multipartfile[] uploadfile) { long begin = system.currenttimemillis(); map<object, object> map = new hashmap<>(10); int count = 0; for (multipartfile file : uploadfile) { object result = nginxservice.uploadpicture(file); map.put(count, result); count++; } long end = system.currenttimemillis(); log.info("任务结束,共耗时:[" + (end-begin) + "]毫秒"); return map; } }
啟動項目,postman神器一波
#注意:
1.如果要視訊跟圖片一起上傳的話,只要修改nginx.conf設定文件,加入對應的影片後綴即可,程式碼沒變,上傳後也是放在/usr/image 下,要不然檔案能上傳,但是存取不了
2.上面程式碼uploads介面是實作多檔案上傳
以上是SpringBoot+nginx怎麼實作資源上傳功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Java在企業級應用中被廣泛使用是因為其平台獨立性。 1)平台獨立性通過Java虛擬機(JVM)實現,使代碼可在任何支持Java的平台上運行。 2)它簡化了跨平台部署和開發流程,提供了更大的靈活性和擴展性。 3)然而,需注意性能差異和第三方庫兼容性,並採用最佳實踐如使用純Java代碼和跨平台測試。

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

ThesolutiontohandlefilepathsacrossWindowsandLinuxinJavaistousePaths.get()fromthejava.nio.filepackage.1)UsePaths.get()withSystem.getProperty("user.dir")andtherelativepathtoconstructthefilepath.2)ConverttheresultingPathobjecttoaFileobjectifne

Java'splatFormIndenceistificantBecapeitAllowSitallowsDevelostWriTecoDeonCeandRunitonAnyPlatFormwithAjvm.this“ writeonce,runanywhere”(era)櫥櫃櫥櫃:1)交叉plat formcomplibility cross-platformcombiblesible,enablingDeploymentMentMentMentMentAcrAptAprospOspOspOssCrossDifferentoSswithOssuse; 2)

Java適合開發跨服務器web應用。 1)Java的“一次編寫,到處運行”哲學使其代碼可在任何支持JVM的平台上運行。 2)Java擁有豐富的生態系統,包括Spring和Hibernate等工具,簡化開發過程。 3)Java在性能和安全性方面表現出色,提供高效的內存管理和強大的安全保障。

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具