真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能

這篇文章主要講解了“SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能”吧!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括尚義網(wǎng)站建設(shè)、尚義網(wǎng)站制作、尚義網(wǎng)頁制作以及尚義網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,尚義網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到尚義省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

1.nginx安裝及配置

小編使用的服務(wù)器是阿里云的輕量應(yīng)用服務(wù)器,系統(tǒng)使用的是ubuntu。注意記得開放 9090tcp端口,如果不使用 9090端口作為服務(wù)器端口也可不用。

安裝

首先,獲取安裝包是必要的吧,這里提供一個(gè)nginx-1.11.3-ubuntu.tar.gz https://pan.baidu.com/s/1vvb41qkoj4vqfyfckxbkja (密碼45wz)

小編是將安裝包放在/usr/nginx 中,進(jìn)入目錄下然后執(zhí)行 tar -zxvf nginx-1.11.3.tar.gz 進(jìn)行解壓

配置

修改 /usr/nginx/conf/nginx.conf :

server {
 listen  9090;
 server_name localhost;

 location ~ .(jpg|png|jpeg|gif|bmp)$ { #可識(shí)別的文件后綴
 root /usr/nginx/image/; #圖片的映射路徑
  autoindex on; #開啟自動(dòng)索引
 expires 1h; #過期時(shí)間
 }
 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;
 }

該修改的修改,該增加的增加,切記勿亂刪

最后一步,啟動(dòng)nginx,執(zhí)行 ./usr/nginx/sbin/nginx

到這里服務(wù)器nginx就準(zhǔn)備可以了

你可以試下在 /usr/nginx/image 下放圖片01.jpg,然后在本地  看看圖片能否訪問到

2. springboot 實(shí)現(xiàn)資源的上傳

pom.xml:


 org.springframework.boot
 spring-boot-starter-parent
 2.1.7.release


 
  org.springframework.boot
  spring-boot-starter-web
  2.1.7.release
 
 
  org.springframework.boot
  spring-boot-starter-test
  2.1.7.release
  test
 
 
 
  org.apache.commons
  commons-lang3
  3.8.1
 
 
  org.apache.commons
  commons-io
  1.3.2
 
 
  commons-net
  commons-net
  3.6
 
 
 
  commons-fileupload
  commons-fileupload
  1.3.3
 
 
  org.projectlombok
  lombok
  1.16.22
 
 
  com.jcraft
  jsch
  0.1.54
 
 
  joda-time
  joda-time
  2.10.3
 

appilcation.yml:

ftp:
 host: 自己服務(wù)器ip
 username: 服務(wù)器賬號(hào)
 password: 服務(wù)器密碼
 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服務(wù)器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 路徑,不存在就創(chuàng)建目錄
  * @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 "";
 }
 /**
  * 創(chuàng)建目錄
  */
 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 {
 /**
  * 生成隨機(jī)圖片名
  */
 public static string genimagename() {
  //取當(dāng)前時(shí)間的長整形值包含毫秒
  long millis = system.currenttimemillis();
  //加上三位隨機(jī)數(shù)
  random random = new random();
  int end3 = random.nextint(999);
  //如果不足三位前面補(bǔ)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生成文件在服務(wù)器端存儲(chǔ)的子目錄
  string filepath = new datetime().tostring("/yyyymmdd/");
  //2、把圖片上傳到圖片服務(wù)器
  //2.1獲取上傳的io流
  inputstream input = null;
  try {
   input = uploadfile.getinputstream();
  } catch (ioexception e) {
   e.printstacktrace();
  }
  //2.2調(diào)用ftputil工具類進(jìn)行上傳
  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配置中配置可識(shí)別的后綴
  */
 @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("任務(wù)結(jié)束,共耗時(shí):[" + (end-begin) + "]毫秒");
  return json;
 }
 @postmapping("/uploads")
 public object picturesupload(@requestparam(value = "file") multipartfile[] uploadfile) {
  long begin = system.currenttimemillis();
  map 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("任務(wù)結(jié)束,共耗時(shí):[" + (end-begin) + "]毫秒");
  return map;
 }
}

啟動(dòng)項(xiàng)目,postman神器一波

SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能

SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能

注意:

1.如果要視頻跟圖片一起上傳的話,只要修改 nginx.conf配置文件,添加相應(yīng)的視頻后綴即可,代碼沒變,上傳后也是放在 /usr/image 下,要不然文件能上傳,但是訪問不了

2.上面代碼 uploads接口是實(shí)現(xiàn)多文件上傳

感謝各位的閱讀,以上就是“SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


分享名稱:SpringBoot+nginx怎么實(shí)現(xiàn)資源上傳功能
文章網(wǎng)址:http://weahome.cn/article/igdcei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部