123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- package com.iotechn.unimall.launcher.controller;
- import com.alibaba.fastjson.JSONObject;
- import com.aliyun.oss.OSSClient;
- import com.aliyun.oss.common.utils.BinaryUtil;
- import com.aliyun.oss.model.*;
- import com.iotechn.unimall.core.util.GeneratorUtil;
- import com.iotechn.unimall.data.util.LocalUploadImageUtils;
- import org.apache.commons.io.FilenameUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.InitializingBean;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.sql.Date;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * Created by rize on 2019/2/13.
- */
- @Controller
- @RequestMapping("/upload")
- public class FileUploadController implements InitializingBean {
- private static final Logger logger = LoggerFactory.getLogger(FileUploadController.class);
- @Value("${oss.aliyun.oss.accessId}")
- private String accessId;
- @Value("${oss.aliyun.oss.accessKey}")
- private String accessKey;
- @Value("${oss.aliyun.oss.endpoint}")
- private String endpoint;
- @Value("${oss.aliyun.oss.bucket}")
- private String bucket;
- @Value("${oss.aliyun.oss.dir}")
- private String dir;
- @Value("${oss.aliyun.oss.callbackUrl}")
- private String callbackUrl;
- @Value("${oss.aliyun.oss.basekUrl}")
- private String baseUrl;
- @Autowired
- private OSSClient ossClient;
- private String host;
- // @Autowired
- // private StringRedisTemplate stringRedisTemplate;
- @Override
- public void afterPropertiesSet() throws Exception {
- host = "http://" + bucket + "." + endpoint;
- }
- /**
- * 前台签名直传, 由服务器签名,用户可直接上传图片
- * 这种只支持 Aliyun(因为我编码查看文档时,只有阿里云做了这个设计) 优点是 上传不需要占用应用服务器带宽。 目前前端是使用的这个。
- * 若需要更改,请自行修改前端上传逻辑
- * @param request
- * @param response
- */
- @RequestMapping(method = RequestMethod.GET)
- public void upload(HttpServletRequest request, HttpServletResponse response) {
- try {
- long expireTime = 30;
- long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
- Date expiration = new Date(expireEndTime);
- PolicyConditions policyConds = new PolicyConditions();
- policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
- policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
- String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
- byte[] binaryData = postPolicy.getBytes("utf-8");
- String encodedPolicy = BinaryUtil.toBase64String(binaryData);
- String postSignature = ossClient.calculatePostSignature(postPolicy);
- JSONObject respJsonObj = new JSONObject();
- respJsonObj.put("accessid", accessId);
- respJsonObj.put("policy", encodedPolicy);
- respJsonObj.put("signature", postSignature);
- respJsonObj.put("dir", dir);
- respJsonObj.put("host", host);
- respJsonObj.put("expire", String.valueOf(expireEndTime / 1000));
- // respMap.put("expire", formatISO8601Date(expiration));
- JSONObject jasonCallback = new JSONObject();
- jasonCallback.put("callbackUrl", callbackUrl);
- jasonCallback.put("callbackBody",
- "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
- jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
- String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
- respJsonObj.put("callback", base64CallbackBody);
- // System.out.println(ja1.toString());
- response.setHeader("Access-Control-Allow-Origin", "*");
- response.setHeader("Access-Control-Allow-Methods", "GET, POST");
- respJsonObj.put("code", 200);
- respJsonObj.put("baseUrl", baseUrl);
- response(request, response, respJsonObj.toJSONString());
- } catch (Exception e) {
- logger.error("[上传签名] 异常", e);
- }
- }
- /**
- * 后台通过服务器间接传文件
- * @param file
- * @return
- * @throws IOException
- */
- @PostMapping("/admin")
- @ResponseBody
- public Object create(@RequestParam("file") MultipartFile file) throws IOException {
- String fileName = file.getOriginalFilename();
- System.out.println(fileName);
- //调用工具类的方法
- String imageFile = LocalUploadImageUtils.uploadImageFile(file, fileName);
- return imageFile;
- }
- /**
- * Post请求
- */
- @RequestMapping(method = RequestMethod.POST)
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- Map<String, String[]> parameterMap = request.getParameterMap();
- JSONObject responseJson = new JSONObject();
- responseJson.put("code", 200);
- for (String key : parameterMap.keySet()) {
- responseJson.put(key, parameterMap.get(key)[0]);
- }
- response(request, response, responseJson.toJSONString(), HttpServletResponse.SC_OK);
- }
- /**
- * 服务器响应结果
- *
- * @param request
- * @param response
- * @param results
- * @param status
- * @throws IOException
- */
- private void response(HttpServletRequest request, HttpServletResponse response, String results, int status)
- throws IOException {
- String callbackFunName = request.getParameter("callback");
- response.addHeader("Content-Length", String.valueOf(results.length()));
- if (callbackFunName == null || callbackFunName.equalsIgnoreCase(""))
- response.getWriter().println(results);
- else
- response.getWriter().println(callbackFunName + "( " + results + " )");
- response.setStatus(status);
- response.flushBuffer();
- }
- /**
- * 服务器响应结果
- */
- private void response(HttpServletRequest request, HttpServletResponse response, String results) throws IOException {
- String callbackFunName = request.getParameter("callback");
- if (callbackFunName == null || callbackFunName.equalsIgnoreCase(""))
- response.getWriter().println(results);
- else
- response.getWriter().println(callbackFunName + "( " + results + " )");
- response.setStatus(HttpServletResponse.SC_OK);
- response.flushBuffer();
- }
- }
|