rop 文件上传

来源:互联网 发布:jquery.easing.js教程 编辑:程序博客网 时间:2024/06/08 00:37

一 说明 
本章节讲解使用rop进行文件上传(图片) 暂时先引用文档的说明,因为文档已经说的很明白了 
由于服务请求报文是一个文本,无法直接传送二进制的文件内容,因此必须采用某种 
转换机制将二进制的文件内容转换为字符串。Rop 采用如下的方式对上传文件进行编码: 
fileType@BASE64( 文件内容 ) 
fileType代表文件类型,文件内容采用 BASE64 算法进行编码,这样二进制的文件 
内容就可以转换为一个字符串,两者“@”字符分隔。服务端接收到上传的文件后,即可 
解析出文件的类型和文件的内容。 
Rop 定义了一个 UploadFile,代表一个上传的文件,来看一下 UploadFile 的定义: 
UploadFile.java

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.rop.request;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> com.rop.annotation.IgnoreSign;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> org.springframework.util.FileCopyUtils;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.File;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.io.IOException;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//①说明签名算法将忽略所有 UploadFile的参数数据的签名</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@IgnoreSign</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">UploadFile</span> {</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> String fileType;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[] content;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">UploadFile</span>(String fileType, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[] content) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.content = content;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.fileType = fileType;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">UploadFile</span>(File file) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//说明签名算法将忽略所有 UploadFile</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//的参数数据的签名。</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//335</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Rop 开发手册 V1.0</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.content = FileCopyUtils.copyToByteArray(file);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.fileType = file.getName().substring(file.getName().lastIndexOf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'.'</span>)+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (IOException e) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throw</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RuntimeException(e);}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> String <span class="hljs-title" style="box-sizing: border-box;">getFileType</span>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> fileType;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[] <span class="hljs-title" style="box-sizing: border-box;">getContent</span>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> content;}}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li></ul>

UploadFile 类定义处标注了@IgnoreSign 注解,这说明 Rop 的签名算法会忽略所有 
UploadFile 属性。因此,客户端无须将上传文件的参数纳入到签名参数列表中。 
Rop 定义了一个服务于 UploadFile 中的转换器: UploadFileConverter, Rop 已经在内部 
注册了这个转换器,因此可以在 RopRequest 实现类中直接使用 UploadFile,Rop 会自动将 
代表上传文件的格式化字符串参数正确绑定到 UploadFile 中。

文件上传实例 
rop-sample 的 UserService 有一个用于上传用户头像的服务方法: 
代码清单 27 UploadFile.java

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">@ServiceMethod(method = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"user.upload.photo"</span>, version = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1.0"</span>, httpAction = HttpAction<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.POST</span>)public Object uploadPhoto(UploadUserPhotoRequest request) throws Throwable {//①获取上传文件的类型和文件内容String fileType = request<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getPhoto</span>()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getFileType</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>int length = request<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getPhoto</span>()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getContent</span>()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.length</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>ClassPathResource outFile = new ClassPathResource(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>//②将上传的文件保存到类路径下FileCopyUtils<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.copy</span>(request<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getPhoto</span>()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getContent</span>(), new File(outFile<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getFile</span>()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getParent</span>()+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/1."</span> + fileType))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>UploadUserPhotoResponse response = new UploadUserPhotoResponse()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>response<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.setFileType</span>(fileType)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>response<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.setLength</span>(length)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>return response<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>

在①处获取文件的类型和文件的内容,在②处将其保存到服务器的类路径下,最后返 
回上传成功的响应。 uploadPhoto()服务方法的入参是 UploadUserPhotoRequest, 其代码如下 
所示:

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">UploadUserPhotoRequest</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">AbstractRopRequest</span> {</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> String userId;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//①</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> UploadFile photo; …}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

photo 属性对应的类型即是 UploadFile,Rop 会自动将格式化的 photo 字符串请求参数 
绑定到这个属性对象中。 下面是客户端调用 user.upload.photo#1.0 服务的测试方法, 它位于 
UserServiceRawClient 类中: 
代码清单 28 UserServiceRawClient.java:测试调用上传文件服务

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">@Test<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> testUploadUserPhoto() throws Throwable {RestTemplate restTemplate <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> RestTemplate();MultiValueMap<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> form <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> LinkedMultiValueMap<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span>();form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"method"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"user.upload.photo"</span>);form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"appKey"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"00001"</span>);form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"v"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1.0"</span>);form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"sessionId"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mockSessionId1"</span>);form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"locale"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"en"</span>);form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"userId"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1"</span>);<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> sign <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> RopUtils<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>sign(form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>toSingleValueMap(), <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"abcdeabcdeabcdeabcdeabcde"</span>);form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"sign"</span>, sign);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果没有指定相对的类名,该类将从类的根路径开始寻找某个resource,如果指定了相对的类名,则根据指定类</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//的相对路径来查找某个resource。 </span>ClassPathResource resource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> ClassPathResource(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"photo.png"</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//方法二 直接new一个File  列如:File file = new File("E://333.jpg");  </span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//UploadFile uploadFile = new UploadFile(file);这样也可以   </span>UploadFile uploadFile <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> UploadFile(resource<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getFile());<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ①构造一个上传文件对象</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ②添加一个上传的文件, photo 参数不参与签名   </span>form<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>add(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"photo"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"png@"</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> Base64<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>encodeBase64String(uploadFile<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getContent()));<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ③调用上传文件服务</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span> response <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> restTemplate<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>postForObject(SERVER_URL, form, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">String</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>class);System<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>out<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"response:\n"</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> response);assertTrue(response<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>indexOf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"png"</span>) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li></ul>

在①处选择一个要上传的文件,在②处将其转换为一个格式化字符串并使用 photo 传 
递,③处直接调用 user.upload.photo#1.0 服务上传文件。 
文件上传控制 
一般情况下,服务开放平台对上传文件的类型及大小都有严格的限制,一方面保障了 
服务平台的安全,另一方面也可以限制了服务平台资源的占用。 
默认情况下,Rop 不限制上传文件的类型且允许最大上传文件的大小为 10M。可以通 
过rop:annotation-driven/>进行相应的限制: 

rop:annotation-driven 
337 
Rop 开发手册 V1.0 
upload-file-max-size=”10” 
upload-file-types=”png,gif”/> 
upload-file-max-size 的单位为 K,用以指定最大上传文件的大小,而 upload-file-types 
用于指定允许上传的文件类型, 多值用逗号分隔。 如果允许上传所有文件, 可以设置为 “*” 。 
按照以上的配置,允许上传的文件类型为 png 及 gif,而最大允许上传文件的大小为 10K。

按照rop手册的给的示列可以完成简单的单个文件上传,但是如果业务场景中会用涉及到多文件上传(一次传递多张图片)就是一件很头疼的事了 
解决思路: 
1.可以将多张文件流以“-”等符号拼接成字符串,到后台我们再进行拆分,再将字符串转成流进行文件上传,但是这样还有一个问题string最大容量是2.3M所以如果文件过大时这种方法就不行了

0 0
原创粉丝点击