parent
4e842f9318
commit
6a4072a6c7
@ -1,26 +1,26 @@ |
||||
* [首页](/?t=1557743036163) |
||||
* [首页](/?t=1557833057337) |
||||
* 开发文档 |
||||
* [快速体验](files/10010_快速体验.md?t=1557743036167) |
||||
* [项目接入到SOP](files/10011_项目接入到SOP.md?t=1557743036187) |
||||
* [新增接口](files/10020_新增接口.md?t=1557743036187) |
||||
* [业务参数校验](files/10030_业务参数校验.md?t=1557743036187) |
||||
* [错误处理](files/10040_错误处理.md?t=1557743036187) |
||||
* [编写文档](files/10041_编写文档.md?t=1557743036188) |
||||
* [接口交互详解](files/10050_接口交互详解.md?t=1557743036188) |
||||
* [easyopen支持](files/10070_easyopen支持.md?t=1557743036188) |
||||
* [使用签名校验工具](files/10080_使用签名校验工具.md?t=1557743036188) |
||||
* [ISV管理](files/10085_ISV管理.md?t=1557743036188) |
||||
* [路由授权](files/10090_路由授权.md?t=1557743036188) |
||||
* [接口限流](files/10092_接口限流.md?t=1557743036188) |
||||
* [SDK开发](files/10095_SDK开发.md?t=1557743036189) |
||||
* [使用SpringCloudGateway](files/10096_使用SpringCloudGateway.md?t=1557743036189) |
||||
* [应用授权](files/10097_应用授权.md?t=1557743036189) |
||||
* [更改数据节点名称](files/10099_更改数据节点名称.md?t=1557743036189) |
||||
* [对接前端](files/10100_对接前端.md?t=1557743036189) |
||||
* [自定义过滤器](files/10102_自定义过滤器.md?t=1557743036189) |
||||
* [快速体验](files/10010_快速体验.md?t=1557833057339) |
||||
* [项目接入到SOP](files/10011_项目接入到SOP.md?t=1557833057355) |
||||
* [新增接口](files/10020_新增接口.md?t=1557833057355) |
||||
* [业务参数校验](files/10030_业务参数校验.md?t=1557833057355) |
||||
* [错误处理](files/10040_错误处理.md?t=1557833057355) |
||||
* [编写文档](files/10041_编写文档.md?t=1557833057355) |
||||
* [接口交互详解](files/10050_接口交互详解.md?t=1557833057355) |
||||
* [easyopen支持](files/10070_easyopen支持.md?t=1557833057356) |
||||
* [使用签名校验工具](files/10080_使用签名校验工具.md?t=1557833057356) |
||||
* [ISV管理](files/10085_ISV管理.md?t=1557833057356) |
||||
* [路由授权](files/10090_路由授权.md?t=1557833057356) |
||||
* [接口限流](files/10092_接口限流.md?t=1557833057356) |
||||
* [SDK开发](files/10095_SDK开发.md?t=1557833057356) |
||||
* [使用SpringCloudGateway](files/10096_使用SpringCloudGateway.md?t=1557833057356) |
||||
* [应用授权](files/10097_应用授权.md?t=1557833057356) |
||||
* [更改数据节点名称](files/10099_更改数据节点名称.md?t=1557833057356) |
||||
* [对接前端](files/10100_对接前端.md?t=1557833057356) |
||||
* [自定义过滤器](files/10102_自定义过滤器.md?t=1557833057356) |
||||
* 原理分析 |
||||
* [原理分析之@ApiMapping](files/90010_原理分析之@ApiMapping.md?t=1557743036189) |
||||
* [原理分析之路由存储](files/90011_原理分析之路由存储.md?t=1557743036190) |
||||
* [原理分析之如何路由](files/90012_原理分析之如何路由.md?t=1557743036190) |
||||
* [原理分析之文档归纳](files/90013_原理分析之文档归纳.md?t=1557743036190) |
||||
* [常见问题](files/90100_常见问题.md?t=1557743036190) |
||||
* [原理分析之@ApiMapping](files/90010_原理分析之@ApiMapping.md?t=1557833057357) |
||||
* [原理分析之路由存储](files/90011_原理分析之路由存储.md?t=1557833057357) |
||||
* [原理分析之如何路由](files/90012_原理分析之如何路由.md?t=1557833057357) |
||||
* [原理分析之文档归纳](files/90013_原理分析之文档归纳.md?t=1557833057357) |
||||
* [常见问题](files/90100_常见问题.md?t=1557833057357) |
||||
|
@ -0,0 +1,22 @@ |
||||
package com.gitee.sop.gatewaycommon.zuul.filter; |
||||
|
||||
import com.gitee.sop.gatewaycommon.util.RequestUtil; |
||||
import com.netflix.zuul.context.RequestContext; |
||||
import org.springframework.cloud.netflix.zuul.filters.pre.FormBodyWrapperFilter; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
public class FormBodyWrapperFilterExt extends FormBodyWrapperFilter { |
||||
|
||||
|
||||
@Override |
||||
public boolean shouldFilter() { |
||||
RequestContext ctx = RequestContext.getCurrentContext(); |
||||
HttpServletRequest request = ctx.getRequest(); |
||||
// 不是上传文件请求,则进行包装
|
||||
return !RequestUtil.isMultipart(request); |
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
package com.gitee.sop.gatewaycommon.zuul.filter; |
||||
|
||||
import com.gitee.sop.gatewaycommon.util.RequestUtil; |
||||
import com.netflix.zuul.context.RequestContext; |
||||
import org.springframework.cloud.netflix.zuul.filters.pre.Servlet30WrapperFilter; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
public class Servlet30WrapperFilterExt extends Servlet30WrapperFilter { |
||||
@Override |
||||
public boolean shouldFilter() { |
||||
RequestContext ctx = RequestContext.getCurrentContext(); |
||||
HttpServletRequest request = ctx.getRequest(); |
||||
// 不是上传文件请求,则进行包装
|
||||
return !RequestUtil.isMultipart(request); |
||||
} |
||||
} |
@ -0,0 +1,56 @@ |
||||
package com.gitee.sop.storyweb.controller; |
||||
|
||||
import com.gitee.sop.servercommon.annotation.ApiMapping; |
||||
import com.gitee.sop.storyweb.controller.param.FileUploadParam; |
||||
import com.gitee.sop.storyweb.vo.FileUploadVO; |
||||
import org.apache.commons.fileupload.servlet.ServletFileUpload; |
||||
import org.apache.commons.io.IOUtils; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
import org.springframework.web.multipart.MultipartFile; |
||||
import org.springframework.web.multipart.MultipartHttpServletRequest; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.io.IOException; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 演示文件上传 |
||||
* @author tanghc |
||||
*/ |
||||
@RestController |
||||
public class FileUploadDemoController { |
||||
|
||||
/** |
||||
* 接收客户端上传的文件,然后把文件信息返回给客户端 |
||||
* @param param |
||||
* @param request |
||||
* @return |
||||
*/ |
||||
@ApiMapping(value = "demo.file.upload", ignoreValidate = true) |
||||
public FileUploadVO file(FileUploadParam param, HttpServletRequest request) { |
||||
System.out.println(param.getRemark()); |
||||
FileUploadVO vo = new FileUploadVO(); |
||||
//检查form中是否有enctype="multipart/form-data"
|
||||
if (ServletFileUpload.isMultipartContent(request)) { |
||||
//将request变成多部分request
|
||||
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; |
||||
Map<String, MultipartFile> fileMap = multiRequest.getFileMap(); |
||||
fileMap.entrySet() |
||||
.stream() |
||||
.forEach(entry->{ |
||||
MultipartFile multipartFile = entry.getValue(); |
||||
try { |
||||
String fileName = multipartFile.getOriginalFilename(); |
||||
long size = multipartFile.getSize(); |
||||
String fileContent = IOUtils.toString(multipartFile.getInputStream(), "UTF-8"); |
||||
FileUploadVO.FileMeta fileMeta = new FileUploadVO.FileMeta(fileName, size, fileContent); |
||||
vo.getFiles().add(fileMeta); |
||||
System.out.println(fileContent); |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
}); |
||||
} |
||||
return vo; |
||||
} |
||||
} |
@ -0,0 +1,11 @@ |
||||
package com.gitee.sop.storyweb.controller.param; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
@Data |
||||
public class FileUploadParam { |
||||
private String remark; |
||||
} |
@ -0,0 +1,32 @@ |
||||
package com.gitee.sop.storyweb.vo; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
@Data |
||||
public class FileUploadVO { |
||||
|
||||
private List<FileMeta> files = new ArrayList(); |
||||
|
||||
@Data |
||||
public static class FileMeta { |
||||
|
||||
public FileMeta(String filename, long size, String content) { |
||||
this.filename = filename; |
||||
this.size = size; |
||||
this.content = content; |
||||
} |
||||
|
||||
public FileMeta() { |
||||
} |
||||
|
||||
private String filename; |
||||
private long size; |
||||
private String content; |
||||
} |
||||
} |
@ -0,0 +1,11 @@ |
||||
package com.gitee.sop.sdk.model; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
@Data |
||||
public class DemoFileUploadModel { |
||||
private String remark; |
||||
} |
@ -0,0 +1,13 @@ |
||||
package com.gitee.sop.sdk.request; |
||||
|
||||
import com.gitee.sop.sdk.response.DemoFileUploadResponse; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
public class DemoFileUploadRequest extends BaseRequest<DemoFileUploadResponse> { |
||||
@Override |
||||
protected String method() { |
||||
return "demo.file.upload"; |
||||
} |
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.gitee.sop.sdk.response; |
||||
|
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = false) |
||||
public class DemoFileUploadResponse extends BaseResponse { |
||||
|
||||
private List<FileMeta> files = new ArrayList(); |
||||
|
||||
@Data |
||||
public static class FileMeta { |
||||
|
||||
public FileMeta(String filename, long size, String content) { |
||||
this.filename = filename; |
||||
this.size = size; |
||||
this.content = content; |
||||
} |
||||
|
||||
public FileMeta() { |
||||
} |
||||
|
||||
private String filename; |
||||
private long size; |
||||
private String content; |
||||
} |
||||
} |
@ -0,0 +1 @@ |
||||
file1 content |
@ -0,0 +1 @@ |
||||
file2 content... |
@ -1,2 +0,0 @@ |
||||
回忆起 20多年来我们一起走过的日子,我就感到特别温馨、特别甜蜜。你第一次闯入我生命中的情景,仿佛就在眼前……第一次偶然相遇是1996年5月,那是一个夏风习习的夜晚,我刚从工地回来,同事就邀我一起去城建学院跳舞,踏进舞厅的一瞬间,在暗淡温柔的霓虹灯下,你那清新脱俗的靓影一下子就深深的嵌入了我的心里。 |
||||
记得大学时代,李春波的歌曲“小芳”响彻校园,那个叫小芳的村里姑娘,也深深的烙进了我的心底,成了我少年时的梦中偶像。二十多年来,我一直期盼着找到一个象歌曲中所唱的长得好看又善良、有着一双美丽的大眼睛和两条粗辫子的姑娘做我的爱人,但苦苦寻觅却难见芳踪,谁知众里寻她千百度,蓦然回首,那人却在灯火阑珊处……你就这样俏生生的突然出现在我眼前。当时,你穿着浅绿色的衬衣,正在与一位女同学翩翩起舞,两条又粗又长的辫子在身后灵巧的晃动。一曲终了,我急忙挤到你身边请你跳舞。当时的我还不太会跳舞,还好是一首慢四舞曲,我才没出洋相。拥着你在舞厅漫步,因为心情特别激动,又怕舞步不熟踩到你脚,我眼睛始终盯着脚下,不敢正视你的目光;好不容易平复心情与你搭讪,才打探到你是教育学院的学生舞曲就结束了。后面的舞曲不是我不会跳就是被你那“讨厌”的女同学捷足先登了,始终没有机会再次与你共舞,但我的心已经完完全全的被你牵走了。同事周云看我不再跳舞、心事重重的,就问我为什么,得知我心事后,自告奋勇的说下一曲他去邀请你同学,让我有机会请你跳舞。可没想到我那同事的“光头”会把你们吓跑,让上天给我们安排的第一次相遇就这样擦肩而过。 |
@ -1 +0,0 @@ |
||||
红与青 时光如流水般,在我面前一闪而过,但我却只能暗暗叹息。 台灯下,小桌前,我坐在那儿,目光停在桌子上的那一个西瓜面前。十几年前的往事仿佛就在昨日。 小时候,我们兄弟几个围坐在一张破破的桌子前。一个勺子,半个西瓜,大家围着轮流舀着吃,大家的目光都聚焦在西瓜上,也许只有在这一刻,我们才不会那样的打闹。我们都想吃最中间的部分,最红的,最甜的部分,可是又如同大人世界般,我们显得那样腼腆。最后,总是你一小口我一小口,把那中间红红的果肉吞进肚子里,更埋下友谊的种子。 日子深一脚浅一脚的过,学习似乎成了我们唯一的公同语言,我们也从一个被别人称为“造反派”的顽童变为一个学子。甚至有时,在哪儿碰见也只会向对方点点头,丝毫没有了小时烈日下奔跑的情谊。家里的那张破破的桌子也不知去向,取而代之的是一张豪华的青瓷桌…… 小学毕业后那年暑假的最后一天,刚刚步入六年级的他们来送别我,我们围坐在桌边,夏日的炎热似乎把我们所有要诉说的话都给憋了回去,我们都沉默着。冰爽的西瓜成了我们释放的对象,我们不再像小时那样子吃西瓜,所有的西瓜都被切成了片,有红,有青。红红的那部分就在最上面,我们之间的友情就像这样火红。 没有告别仪式,只是如青般离开。 “悄悄,是别离的笙箫” 迈入初中,一切都是陌生,交流变少了,浑浑噩噩的梦中,我又梦见了他们。 关了台灯,寂静与黑暗容我沉思。 初一就要结束的几天里,夏天悄无声息得把炎热带来,家人们又带回来了西瓜,复习之余,我又捧起了半个西瓜,这一回就我一人沉默。握着勺子,一口一口舀着慢慢品味。“嗯?”与瓜皮连着的青色果肉吸引了我。“啊!原来他们比中间的果肉更惹人迷!” 我舀了一勺,“咔嚓”,是多么清脆。 “但我不能放歌”,时光荏苒,十几年前的往事似乎又模模糊糊。 他们如流水划过,留下一道青色的痕迹。青,是青。 |
Loading…
Reference in new issue