1.图片上传本地ftp服务器(Window10)
1.1 建立ftp服务器
1.1.1 搜索框搜索,选择IIS管理器
1.1.2 查看本地是否有‘添加FTP站点的选项’,假如没有选执行(以下操作)
1.1.3 在搜索栏目里面搜索‘控制面板’
1.1.4 选择‘程序’
1.1.5 选择‘启用或管理windows选项’
1.1.6 选择Internet Information Services->勾选‘FTP服务器’,点击确定
1.1.8 这样就可以显示‘添加FTP站点的功能’
1.1.9 输入ftp站点的名称和物理路径
1.1.10 查询本机cmd,搜索栏输入
1.1.11 输入ipconfig
1.1.12 获取其中的ip
1.1.13 输入本机的Ip
1.1.14 选择如图,然后点击完成
1.1.15 打开控制面板,选择‘用户账户’
1.1.16 打开控制面板,选择‘用户账户’
1.1.17 打开控制面板,选择‘管理其他账户’
1.1.18 打开控制面板,选择‘在电脑设置中添加新账户’
1.1.19 将‘其他人添加到这台电脑’
1.1.20 输入‘账号密码及相关的问题’,然后点击下一步
1.1.22 建立用户成功
1.2 配置nginx(主要目的是把地址映射成为http://image.imooc.com/的形式)
1.21 去官网下载nginx,并安装
1.23 建立一个vhost的文件夹
1.24 image.imooc.com.conf的文件,及文件内容为一下
server {
listen 80;
autoindex off;
server_name image.imooc.com;
access_log c:/access.log combined;
index index.html index.htm index.jsp index.php;
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){ return 404; }
location ~ /(mmall_fe|mmall_admin_fe)/dist/view/* {
deny all; }
location / {
root C:\ftpfile\img; add_header Access-Control-Allow-Origin *;
} }
1.25 双击nginx.exe,启动nginx
1.3 修改本机地址
1.3.1修改本机的配置文件 hosts,路径为C:\Windows\System32\drivers\etc,并添加127.0.0.1 image.imooc.com
1.3.2 输入本机ftp://本机ip,查看是否出现以下界面
1.3.3 看到如图界面证明本机ftp服务器配置成功
1.4 建立文件上传的方法
1.4.1 建立一个index.html文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>Hello World!</h2>
springmvc上传文件
<form name="form1" action="/manage/product/upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="upload_file"/>
<input type="submit" value="上传文件">
</form>
</body>
</html>
1.4.2 建立一个ProductManageController.java文件
@RequestMapping("/upload.do")
@ResponseBody
public ServerResponse upload(HttpSession session,@RequestParam(value = "upload_file",required = false )MultipartFile file, HttpServletRequest request){
String path=request.getSession().getServletContext().getRealPath("upload");
String targetFileName=iFileService.upload(file,path);
String url= PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;
Map fileMap= Maps.newHashMap();
fileMap.put("uri",targetFileName);
fileMap.put("url",url);
return ServerResponse.createBySuccess(fileMap);
}
1.4.3 建立一个IFileService.java文件
package com.mmall.service;
import org.springframework.web.multipart.MultipartFile;
public interface IFileService {
String upload(MultipartFile file, String path);
}
1.4.4 建立一个FileServiceImpl.java实现类型
package com.mmall.service.impl;
import com.google.common.collect.Lists;
import com.mmall.service.IFileService;
import com.mmall.util.FTPUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Service("iFileService")
public class FileServiceImpl implements IFileService {
private Logger logger= LoggerFactory.getLogger(FileServiceImpl.class);
public String upload(MultipartFile file,String path){
String fileName=file.getOriginalFilename();
//扩展名
String fileExtensionName=fileName.substring(fileName.lastIndexOf(".")+1);
String uploadFileName= UUID.randomUUID().toString()+"."+fileExtensionName;
logger.info("开始上传文件,上传文件的文件名:{},上传的路径是:{},新文件名:{}",fileName,path,uploadFileName);
File fileDir=new File(path);
if(!fileDir.exists()){
fileDir.setWritable(true);
fileDir.mkdirs();
}
File targetFile=new File(path,uploadFileName);
try {
file.transferTo(targetFile);
//上传文件成功
FTPUtil.uploadFile(Lists.newArrayList(targetFile));
//已经上传到FTP服务器
targetFile.delete();
} catch (IOException e) {
logger.error("上传文件异常",e);
return null;
}
return targetFile.getName();
}
}
1.4.5 建立一个FTPUtil.java工具类
package com.mmall.util;
import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class FTPUtil {
private static final Logger logger= LoggerFactory.getLogger(FTPUtil.class);
private static String ftpIp=PropertiesUtil.getProperty("ftp.server.ip");
private static String ftpUser=PropertiesUtil.getProperty("ftp.user");
private static String ftpPass=PropertiesUtil.getProperty("ftp.pass");
public FTPUtil(String ip,int port,String user,String pwd){
this.ip=ip;
this.port=port;
this.user=user;
this.pwd=pwd;
}
public static boolean uploadFile(List<File> fileList) throws IOException {
FTPUtil ftpUtil=new FTPUtil(ftpIp,21,ftpUser,ftpPass);
logger.info("开始连接FTP服务器");
boolean result=ftpUtil.uploadFile("img",fileList);
logger.info("开始连接FTP服务器,结束上传,上传结果:{}",result);
return result;
}
private boolean uploadFile(String remotePath,List<File> fileList) throws IOException {
boolean uploaded=true;
FileInputStream fis=null;
//连接FTP服务器
if(connectServer(this.ip,this.port,this.user,this.pwd)){
try {
ftpClient.changeWorkingDirectory(remotePath);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UFT-8");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
for(File fileItem:fileList){
fis=new FileInputStream(fileItem);
ftpClient.storeFile(fileItem.getName(),fis);
}
} catch (IOException e) {
uploaded=false;
logger.error("上传文件异常",e);
e.printStackTrace();
}finally {
fis.close();
ftpClient.disconnect();
}
}
return uploaded;
}
private boolean connectServer(String ip,int port,String user,String pwd){
Boolean isSuccess=false;
ftpClient=new FTPClient();
try {
ftpClient.connect(ip);
isSuccess=ftpClient.login(user,pwd);
} catch (IOException e) {
logger.error("服务器FTP服务器异常连接异常",e);
}
return isSuccess;
}
private String ip;
private int port;
private String user;
private String pwd;
private FTPClient ftpClient;
public static String getFtpIp() {
return ftpIp;
}
public static void setFtpIp(String ftpIp) {
FTPUtil.ftpIp = ftpIp;
}
public static String getFtpUser() {
return ftpUser;
}
public static void setFtpUser(String ftpUser) {
FTPUtil.ftpUser = ftpUser;
}
public static String getFtpPass() {
return ftpPass;
}
public static void setFtpPass(String ftpPass) {
FTPUtil.ftpPass = ftpPass;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public FTPClient getFtpClient() {
return ftpClient;
}
public void setFtpClient(FTPClient ftpClient) {
this.ftpClient = ftpClient;
}
}
1.4.6 src/main/resources下面建立mmall.properties的文件
ftp.server.ip=192.168.10.1
ftp.user=mmallftp
ftp.pass=ftppassword
ftp.server.http.prefix=http://image.imooc.com/
alipay.callback.url=http://www.happymmall.com/order/alipay_callback.do
password.salt = geelysdafaqj23ou89ZXcj@#$@#$#@KJdjklj;D../dSF.,
1.4.7 启动项目,选择文件进行上传
1.4.8 测试成功,能够正常上传
pom文件引入的相关jar
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>mmall</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>mmall Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<org.springframework.version>4.0.0.RELEASE</org.springframework.version>
<org.mybatis.version>3.4.1</org.mybatis.version>
<org.mybatis.spring.version>1.3.0</org.mybatis.spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>7.0.64</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${org.mybatis.spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${org.mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
<!--<scope>runtime</scope>-->
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--<scope>test</scope>-->
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
<!-- id加密解密 -->
<dependency>
<groupId>org.hashids</groupId>
<artifactId>hashids</artifactId>
<version>1.0.1</version>
</dependency>
<!-- ftpclient -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.1</version>
</dependency>
<!-- file upload -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<!-- mybatis pager -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.4</version>
</dependency>
<!-- alipay -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<finalName>Mybatis_Generator</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
<!-- geelynote maven的核心插件之-complier插件默认只支持编译Java 1.4,因此需要加上支持高版本jre的配置,在pom.xml里面加上 增加编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.读取配置文件中的相关数据
2.1配置配置文件工具类(PropertiesUtil)
package com.mmall.util;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
/**
* Created by geely
*/
public class PropertiesUtil {
private static Logger logger= LoggerFactory.getLogger(PropertiesUtil.class);
private static Properties props;
static {
String fileName="mmall.properties";
props=new Properties();
try {
props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8"));
} catch (IOException e) {
logger.error("配置文件读取异常",e);
}
}
public static String getProperty(String key){
String value=props.getProperty(key.trim());
if(StringUtils.isBlank(value)){
return null;
}
return value.trim();
}
public static String getProperty(String key,String defaultValue){
String value=props.getProperty(key.trim());
if(StringUtils.isBlank(value)){
value=defaultValue;
}
return value.trim();
}
}
2.2配置相关的配置文件(mmall.properties)
ftp.server.ip=192.168.1.105
ftp.user=mmallftp
ftp.pass=ftppassword
ftp.server.http.prefix=http://image.imooc.com/
alipay.callback.url=http://www.happymmall.com/order/alipay_callback.do
password.salt = geelysdafaqj23ou89ZXcj@#$@#$#@KJdjklj;D../dSF.,
2.3java调用
AlipayTradePrecreateRequestBuilder builder = new AlipayTradePrecreateRequestBuilder()
.setSubject(subject).setTotalAmount(totalAmount).setOutTradeNo(outTradeNo)
.setUndiscountableAmount(undiscountableAmount).setSellerId(sellerId).setBody(body)
.setOperatorId(operatorId).setStoreId(storeId).setExtendParams(extendParams)
.setTimeoutExpress(timeoutExpress)
.setNotifyUrl(PropertiesUtil.getProperty("alipay.callback.url"))//支付宝服务器主动通知商户服务器里指定的页面http路径,根据需要设置
.setGoodsDetailList(goodsDetailList);
2.调用外部接口
public static String executePost(String url, String jsonData, String encode)throws Exception{
logger.debug(jsonData);
if (null == encode || encode.equals("")){
encode ="UTF-8";
}
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(url);
StringEntity entity = new StringEntity(jsonData,"UTF-8");
entity.setContentEncoding("UTF-8");
httppost.addHeader("Content-type","application/json");
httppost.setHeader("Accept", "application/json");
httppost.addHeader("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString(("pi_ser" + ":" + "init1234").getBytes()));
httppost.setEntity(entity);
String result = null;
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httppost);
HttpEntity httpEntity = response.getEntity();
if(response.getStatusLine().getStatusCode() == 200 ){
result = EntityUtils.toString(httpEntity,"UTF-8");
}
}catch (Exception e){
e.printStackTrace();
}finally {// 关闭连接,释放资源
try {
if (response != null) {
response.close();
}
if (httpclient != null) {
httpclient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
logger.debug(result);
return result;
}