Bläddra i källkod

加入阿里云短信平台依赖

albertshaw 9 år sedan
förälder
incheckning
5ee9a9c7ca

+ 10 - 0
pom.xml

@@ -288,6 +288,16 @@
 		    <artifactId>poi</artifactId>
 		    <version>3.15</version>
 		</dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-sms</artifactId>
+            <version>3.0.0-rc1</version>
+        </dependency>
 	</dependencies>
 	<build>
 		<resources>

+ 1 - 7
src/main/java/com/goafanti/common/bo/Result.java

@@ -3,13 +3,7 @@ package com.goafanti.common.bo;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.goafanti.common.model.BaseModel;
-
-public class Result extends BaseModel {
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
+public class Result {
 	private Object data;
 	private List<Error> error = new ArrayList<Error>();
 

+ 33 - 0
src/main/java/com/goafanti/common/controller/BaseApiController.java

@@ -1,5 +1,6 @@
 package com.goafanti.common.controller;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -7,6 +8,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
@@ -16,6 +18,16 @@ import org.springframework.web.multipart.MultipartRequest;
 @RequestMapping(value = "/api")
 public class BaseApiController extends BaseController {
 
+	@Value(value = "${upload.path}")
+	private String uploadPath = null;
+	@Value(value = "${upload.private.path}")
+	private String uploadPrivatePath = null;
+
+	/**
+	 * 
+	 * @param request
+	 * @return
+	 */
 	protected List<MultipartFile> getFiles(HttpServletRequest request) {
 		if (ServletFileUpload.isMultipartContent(request)) {
 			Iterator<String> itr = ((MultipartRequest) request).getFileNames();
@@ -28,4 +40,25 @@ public class BaseApiController extends BaseController {
 		return new ArrayList<MultipartFile>();
 	}
 
+	/**
+	 * 
+	 * @param fileName
+	 * @return
+	 */
+	protected File toFile(String fileName) {
+		File toFile = new File(uploadPath + fileName);
+		toFile.mkdirs();
+		return toFile;
+	}
+
+	/**
+	 * 
+	 * @param fileName
+	 * @return
+	 */
+	protected File toPrivateFile(String fileName) {
+		File toFile = new File(uploadPrivatePath + fileName);
+		toFile.mkdirs();
+		return toFile;
+	}
 }

+ 42 - 2
src/main/java/com/goafanti/user/controller/UserApiController.java

@@ -1,11 +1,19 @@
 package com.goafanti.user.controller;
 
+import java.io.IOException;
+import java.util.List;
+
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MultipartFile;
 
+import com.goafanti.common.bo.Result;
 import com.goafanti.common.controller.BaseApiController;
+import com.goafanti.common.utils.LoggerUtils;
 import com.goafanti.common.utils.PasswordUtil;
 import com.goafanti.user.service.UserService;
 
@@ -16,6 +24,38 @@ public class UserApiController extends BaseApiController {
 	private UserService userService;
 	@Resource(name = "passwordUtil")
 	private PasswordUtil passwordUtil;
-	
-	
+
+	@RequestMapping(value = "/avatar/upload", method = RequestMethod.POST)
+	public Result avatar(HttpServletRequest req) {
+		Result res = new Result();
+		res.setData(handleFile(res, "/avatar/", false, req));
+		return res;
+	}
+
+	@RequestMapping(value = "/identity/upload", method = RequestMethod.POST)
+	public Result identityFile(HttpServletRequest req) {
+		Result res = new Result();
+		res.setData(handleFile(res, "/identity/", true, req));
+		return res;
+	}
+
+	private String handleFile(Result res, String path, boolean isPrivate, HttpServletRequest req) {
+		List<MultipartFile> files = getFiles(req);
+		String fileName = path + System.nanoTime() + ".jpg";
+		if (!files.isEmpty()) {
+			try {
+				MultipartFile mf = files.get(0);
+				mf.transferTo(isPrivate ? toPrivateFile(fileName) : toFile(fileName));
+				LoggerUtils.debug(getClass(), fileName + " 文件上传成功");
+			} catch (IllegalStateException | IOException e) {
+				LoggerUtils.error(getClass(), "文件上传失败", e);
+				res.getError().add(buildError("", "文件上传失败!"));
+				return "";
+			}
+		} else {
+			res.getError().add(buildError("", "文件上传失败!"));
+			return "";
+		}
+		return fileName;
+	}
 }

+ 3 - 0
src/main/resources/props/config_local.properties

@@ -51,3 +51,6 @@ session.validate.timespan=18000000
 
 app.name=AFT
 static.host=//afts.hnzhiming.com
+
+upload.path=/Users/xiaolong/Sites/upload
+upload.private.path=/Users/xiaolong/Sites/doc

+ 1 - 1
src/main/resources/shiro_base_auth.ini

@@ -5,5 +5,5 @@
 /open/**=anon
 /favicon.ico=anon
 /static/**=anon
-/api/**=simple,permission
+/api/**=anon
 /**=anon

+ 79 - 0
src/main/webapp/WEB-INF/html/upload.html

@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black">
+  <meta name="format-detection" content="telephone=no">
+  <title>测试上传接口页面</title>
+  <style>
+    body {
+      font-size: 14px;
+      font-family: "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
+    }
+    
+    #root {
+      margin: 30px;
+    }
+    
+    label {
+      display: block;
+      margin: 6px 0;
+    }
+    textarea {
+      display: block;
+    }
+    #submit {
+      padding: 6px 30px;
+      border-radius: 3px;
+      background-color: #eee;
+      border: 1px;
+      color: #666;
+    }
+    #submit::hover {
+      padding: 6px 30px;
+      border-radius: 3px;
+      background-color: #ccc;
+      border: 1px;
+      color: #666;
+    }
+    #submit::active {
+      padding: 6px 30px;
+      border-radius: 3px;
+      background-color: #bbb;
+      border: 1px;
+      color: #666;
+    }
+  </style>
+</head>
+
+<body>
+  <div id="root">
+    <input type="file" id="myfile">
+    <div id="result"></div>
+  </div>
+  <script src="//cdn.bootcss.com/jquery/3.1.0/jquery.js"></script>
+  <script> 
+    (function ($) {
+    	$('#myfile').on('change', function(evt){
+    		var formdata = new FormData();
+            formdata.append("files", evt.target.files[0]);
+    		
+    		$.ajax({
+                type: 'post',
+                url: "/aft/api/user/avatar/upload",
+                contentType: false,
+                processData: false,
+                data: formdata
+            }).always(function (res) {
+                $('#result').text(JSON.stringify(res));
+            }.bind(this));
+    	});
+    })(jQuery);
+  </script>
+</body>
+
+</html>