ホームページ >Java >&#&チュートリアル >SpringBoot+nginxによるリソースアップロード機能の実装方法
1.nginx のインストールと構成
エディターが使用するサーバーは Alibaba Cloud の軽量アプリケーション サーバーで、システムは 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>
apilcation.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); } }
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; } }
プロジェクトを開始して、ポストマンのアーティファクトの波を作りましょう
##注:
1. 写真と一緒にビデオをアップロードしたい場合は、nginx.conf 設定ファイルを変更して追加するだけです。対応するビデオのサフィックス。ただし、コードは変更されていません。アップロード後、/usr/image にも配置されます。それ以外の場合、ファイルはアップロードできますが、アクセスできません。
2. のアップロード インターフェイス上記のコードは複数のファイルのアップロードを実装するものです以上がSpringBoot+nginxによるリソースアップロード機能の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。