国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Nginx 搭建圖片服務器

jas0n / 1042人閱讀

摘要:搭建圖片服務器本章內容通過和搭建圖片服務器。第二個部分是為了更好的體驗上傳,批量上傳,回顯功能的富文本編輯器。總結搭建服務器的思維實現上傳圖片的功能上傳圖片的功能源碼搭建圖片服務器到這里就結束了,有什么不足的地方,請賜教。

Nginx 搭建圖片服務器

本章內容通過Nginx 和 FTP 搭建圖片服務器。在學習本章內容前,請確保您的Linux 系統已經安裝了Nginx和Vsftpd。

Nginx 安裝:https://segmentfault.com/a/11...
Vsftpd 安裝:https://segmentfault.com/a/11...

本章知識點

效果圖:

需求:實現圖片的上傳和批量上傳
技術:Nginx,Vsftpd,Spring,SpringMVC,KindEditor,CentOS
說明:本章節內容主要是實現圖片的上傳功能。使用 KindEditer 是為了更好的演示圖片的上傳,回顯,批量效果。后臺代碼與KindEditer沒有直接關系,放心閱讀。另外源碼中有Mybatis的jar,不用理會,本章內容用不到,是為后續內容做準備!
源碼:見文章底部
場景:用戶將圖片上傳到 tomcat 服務器上,再由 tomcat 服務器通過FTP上傳到 Nginx 服務器上。

項目結構:

單元測試

首先要攻破核心技術。通過單元測試實現圖片上傳的功能。

package com.itdragon.test;

import java.io.File;
import java.io.FileInputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.junit.Test;

public class PictureFTPTest {

    // 測試 ftp 上傳圖片功能
    @Test
    public void testFtpClient() throws Exception {
        // 1. 創建一個FtpClient對象
        FTPClient ftpClient = new FTPClient();
        // 2. 創建 ftp 連接
        ftpClient.connect("192.168.0.11", 21);
        // 3. 登錄 ftp 服務器
        ftpClient.login("ftpuser", "root");
        // 4. 讀取本地文件
        FileInputStream inputStream = new FileInputStream(new File("F:hello.png"));
        // 5. 設置上傳的路徑
        ftpClient.changeWorkingDirectory("/usr/local/nginx/html/images");
        // 6. 修改上傳文件的格式為二進制
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        // 7. 服務器存儲文件,第一個參數是存儲在服務器的文件名,第二個參數是文件流
        ftpClient.storeFile("hello.jpg", inputStream);
        // 8. 關閉連接
        ftpClient.logout();
        
    }
    
}

說明:這里的ip地址,端口,ftp用戶名,密碼,本地文件路徑,以及Nginx服務器圖片路徑等,這些字符串參數都要根據自己實際設置的來填寫的。如果你的Nginx和Vsftpd安裝是按照我提供的鏈接來做的。那你只需要改ip地址即可。

Maven 的Web 項目

搭建Maven的Web 項目,之前有寫過。這里就不過多描述。

項目核心配置文件

首先是 Maven 的核心文件 pom.xml


    4.0.0
    com.itdragon.upload
    pictrue-service
    0.0.1-SNAPSHOT
    war

    
    
        4.12
        4.1.3.RELEASE
        3.2.8
        1.2.2
        1.2.15
        5.1.6
        1.6.4
        2.4.2
        1.0.9
        4.3.5
        1.2
        2.5
        2.0
        2.5
        3.3.2
        1.3.2
        3.3
        3.4.2
        0.9.1
        1.3.1
        2.7.2
        4.10.3
    
    
        
        
            joda-time
            joda-time
            ${joda-time.version}
        
        
        
            org.apache.commons
            commons-lang3
            ${commons-lang3.version}
        
        
            org.apache.commons
            commons-io
            ${commons-io.version}
        
        
            commons-net
            commons-net
            ${commons-net.version}
        
        
        
            com.fasterxml.jackson.core
            jackson-databind
            ${jackson.version}
        
        
        
            org.apache.httpcomponents
            httpclient
            ${httpclient.version}
        
        
        
            junit
            junit
            ${junit.version}
            test
        
        
        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        
        
        
            org.mybatis
            mybatis
            ${mybatis.version}
        
        
            org.mybatis
            mybatis-spring
            ${mybatis.spring.version}
        
        
            com.github.miemiedev
            mybatis-paginator
            ${mybatis.paginator.version}
        
        
            com.github.pagehelper
            pagehelper
            ${pagehelper.version}
        
        
        
            mysql
            mysql-connector-java
            ${mysql.version}
        
        
        
            com.alibaba
            druid
            ${druid.version}
        
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
        
            jstl
            jstl
            ${jstl.version}
        
        
            javax.servlet
            servlet-api
            ${servlet-api.version}
            provided
        
        
            javax.servlet
            jsp-api
            ${jsp-api.version}
            provided
        
        
        
            commons-fileupload
            commons-fileupload
            ${commons-fileupload.version}
        
        
        
            redis.clients
            jedis
            ${jedis.version}
        
        
        
            org.apache.solr
            solr-solrj
            ${solrj.version}
        
    

    
        ${project.artifactId}
        
            
            
                org.apache.maven.plugins
                maven-resources-plugin
                2.7
                
                    UTF-8
                
            
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.2
                
                    1.7
                    1.7
                    UTF-8
                
            
        
        
            
                
                
                    org.apache.tomcat.maven
                    tomcat7-maven-plugin
                    2.2
                
            
        
    

說明:和文件上傳有直接關系的是:


            commons-fileupload
            commons-fileupload
        

然后是 Web 項目的核心文件 web.xml



    pictrue-service
    
    
        contextConfigLocation
        classpath:spring/applicationContext-*.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        CharacterEncodingFilter
        /*
    
    
    
        pictrue-service
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring/springmvc.xml
        
        1
    
    
        pictrue-service
        /
    

再是 SpringMVC 配置文件 springmvc.xml,需要添加文件上傳解析器


    
        
        
        
        
    

最后是 Ftp 配置文件 resource.properties

FTP_ADDRESS=192.168.0.11
FTP_PORT=21
FTP_USERNAME=ftpuser
FTP_PASSWORD=root
FTP_BASE_PATH=/usr/local/nginx/html/images
IMAGE_BASE_URL=http://192.168.0.11/images
Service 層

上傳圖片的接口 PictureService.java

package com.itdragon.service;
import java.util.Map;
import org.springframework.web.multipart.MultipartFile;
public interface PictureService {

    /**
     * 上傳,批量上傳接口
     * @param uploadFile
     * @return
     */
    Map uploadPicture(MultipartFile uploadFile);
}

上傳圖片接口實現類 PictureServiceImpl.java

package com.itdragon.service.impl;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.itdragon.service.PictureService;

@Service
@SuppressWarnings({"rawtypes", "unchecked"})
public class PictureServiceImpl implements PictureService {
    
    // 通過 Spring4 的 Value注解,獲取配置文件中的屬性值
    @Value("${FTP_ADDRESS}")
    private String FTP_ADDRESS;     // ftp 服務器ip地址
    @Value("${FTP_PORT}")
    private Integer FTP_PORT;        // ftp 服務器port,默認是21
    @Value("${FTP_USERNAME}")
    private String FTP_USERNAME;    // ftp 服務器用戶名
    @Value("${FTP_PASSWORD}")
    private String FTP_PASSWORD;    // ftp 服務器密碼
    @Value("${FTP_BASE_PATH}")
    private String FTP_BASE_PATH;    // ftp 服務器存儲圖片的絕對路徑
    @Value("${IMAGE_BASE_URL}")
    private String IMAGE_BASE_URL;    // ftp 服務器外網訪問圖片路徑

    @Override
    public Map uploadPicture(MultipartFile uploadFile) {
        Map resultMap = new HashMap<>();
        try {
            // 1. 取原始文件名
            String oldName = uploadFile.getOriginalFilename();
            
            // 2. ftp 服務器的文件名
            String newName = oldName;
            //圖片上傳
            boolean result = uploadFile(FTP_ADDRESS, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, 
                    uploadFile.getInputStream(), FTP_BASE_PATH, newName);
            //返回結果
            if(!result) {
                resultMap.put("error", 1);
                resultMap.put("message", "upload Fail");
                return resultMap;
            }
            resultMap.put("error", 0);
            resultMap.put("url", IMAGE_BASE_URL + "/" + newName);
            return resultMap;
            
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("error", 1);
            resultMap.put("message", "upload Fail");
            return resultMap;
        }
    }
    
    /**
     * ftp 上傳圖片方法
     * @param ip             ftp 服務器ip地址
     * @param port             ftp 服務器port,默認是21
     * @param account         ftp 服務器用戶名
     * @param passwd         ftp 服務器密碼
     * @param inputStream    文件流
     * @param workingDir     ftp 服務器存儲圖片的絕對路徑
     * @param fileName      上傳到ftp 服務器文件名
     * @throws Exception
     * 
     */
    public boolean uploadFile(String ip, Integer port, String account, String passwd,
            InputStream inputStream, String workingDir, String fileName) throws Exception{
        boolean result = false;
        // 1. 創建一個FtpClient對象
        FTPClient ftpClient = new FTPClient();
        try {
            // 2. 創建 ftp 連接
            ftpClient.connect(ip, port);
            // 3. 登錄 ftp 服務器
            ftpClient.login(account, passwd);
            int reply = ftpClient.getReplyCode(); // 獲取連接ftp 狀態返回值
            System.out.println("code : " + reply);
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect(); // 如果返回狀態不再 200 ~ 300 則認為連接失敗
                return result;
            }
            // 4. 讀取本地文件
//            FileInputStream inputStream = new FileInputStream(new File("F:hello.png"));
            // 5. 設置上傳的路徑
            ftpClient.changeWorkingDirectory(workingDir);
            // 6. 修改上傳文件的格式為二進制
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // 7. 服務器存儲文件,第一個參數是存儲在服務器的文件名,第二個參數是文件流
            if (!ftpClient.storeFile(fileName, inputStream)) {
                return result;
            }
            // 8. 關閉連接
            inputStream.close();
            ftpClient.logout();
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // FIXME 聽說,項目里面最好少用try catch 捕獲異常,這樣會導致Spring的事務回滾出問題???難道之前寫的代碼都是假代碼!!!
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }

}

說明:
① @Value 注解是Spring4 中提供的,@Value("${XXX}")
② 返回值是一個Map,并且key有error,url,message。這是根據KindEditer的語法要求來的。詳情見鏈接。http://kindeditor.net/docs/up...

Controller 層

負責頁面跳轉的 PageController.java

package com.itdragon.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class PageController {

    /**
     * 打開首頁
     */
    @RequestMapping("/")
    public String showIndex() {
        return "index";
    }
    
    @RequestMapping("/{page}")
    public String showpage(@PathVariable String page) {
        System.out.println("page : " + page);
        return page;
    }
}

負責圖片上傳的 PictureController.java

package com.itdragon.controller;

import java.util.Map;

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;

@RestController
public class PictureController {

    @Autowired
    private PictureService pictureService;
    
    @RequestMapping("pic/upload")
    public String pictureUpload(@RequestParam(value = "fileUpload") MultipartFile uploadFile) {
        String json = "";
        try {
            Map result = pictureService.uploadPicture(uploadFile);
            // 瀏覽器擅長處理json格式的字符串,為了減少因為瀏覽器內核不同導致的bug,建議用json
            json = new ObjectMapper().writeValueAsString(result);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return json;
    }
}

說明:
① @RestController 也是Spring4 提供的,是 @Controller + @ResponseBody 的組合注解。
② Controller層的返回值是一個json格式的字符串。是考慮到瀏覽器對json解析兼容性比較好。

Views視圖層

負責上傳圖片的jsp頁面 pic-upload.jsp

<%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%>




ITDragon 圖片上傳

    
     
    
    
  
  
    

測試上傳圖片功能接口的form表單


借用KindEditor富文本編輯器實現批量上傳圖片

說明:pic-upload.jsp 分為兩個部分,第一個部分是為了測試上傳圖片功能的form表單。第二個部分是為了更好的體驗上傳,批量上傳,回顯功能的KindEditer 富文本編輯器。

總結

Nginx 搭建服務器的思維

Java實現 Ftp上傳圖片的功能

KindEditer 上傳圖片的功能

源碼:https://github.com/ITDragonBl...

Nginx 搭建圖片服務器到這里就結束了,有什么不足的地方,請賜教。如果覺得不錯,可以點個贊哦!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39693.html

相關文章

  • 阿里云搭建圖片務器圖片資源務器搭建

    摘要:阿里云搭建圖片服務器,圖片資源服務器搭建背景我第一次搭建圖片服務器是在我的虛擬機服務器下,后來虛擬機崩潰了,就在阿里云買了一臺輕量級服務器,然后安裝了圖片服務器。阿里云搭建圖片服務器,圖片資源服務器搭建背景我第一次搭建圖片服務器是在我的虛擬機服務器下,后來虛擬機崩潰了,就在阿里云買了一臺輕量級服務器,然后安裝了圖片服務器。不過我當時并沒有寫一個文檔進行記錄,直到我后來再次需要一臺圖片服務器,...

    techstay 評論0 收藏0
  • 阿里云搭建圖片務器圖片資源務器搭建

    摘要:背景我第一次搭建圖片服務器是在我的虛擬機服務器下,后來虛擬機崩潰了,就在阿里云買了一臺輕量級服務器,然后安裝了圖片服務器。當執行完上面的命令之后,我們需要上傳安裝包到阿里云服務器,然后在阿里云創建一個目錄用來安裝。背景 我第一次搭建圖片服務器是在我的虛擬機服務器下,后來虛擬機崩潰了,就在阿里云買了一臺輕量級服務器,然后安裝了圖片服務器。不過我當時并沒有寫一個文檔進行記錄,直到我后來再次需要...

    20171112 評論0 收藏0
  • 圖片務器(nginx+vxftpd)的搭建

    摘要:一搭建圖片服務器在集群中,需要一個圖片服務器來統一存放讀取圖片,這里使用服務器來實現圖片的上傳用服務器實現圖片的訪問搭建服務器安裝環境是語言開發,建議在上運行,本教程使用作為安裝環境。內容修改為檢查修改是否生效重啟的搭建參考了 一.搭建圖片服務器 在集群中,需要一個圖片服務器來統一存放/讀取圖片,這里使用FTP服務器來實現圖片的上傳,用nginx服務器實現圖片的訪問 showImg(h...

    Blackjun 評論0 收藏0
  • 搭建 Nginx 圖片務器(前臺到后臺完整流程及源代碼)

    摘要:介紹用搭建圖片服務器瀏覽器通過請求將圖片傳到服務器將圖片存儲后的重定向到代理到后臺服務器本人使用的后臺是后臺獲取圖片地址后存儲到。如若轉載,請注明出處一安裝安裝及上傳模塊安裝重定向支持和支持,如果不需要可以不安裝。 介紹: 用 Nginx 搭建圖片服務器瀏覽器通過 Ajax 請求將圖片傳到 Nginx 服務器Nginx 將圖片存儲后的重定向到代理到后臺服務器(本人使用的后臺是 SSM...

    張憲坤 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<