From fd069e08e1081b36d5a01da7617259374c04c943 Mon Sep 17 00:00:00 2001 From: Rory Date: Wed, 30 Dec 2020 11:30:10 +0800 Subject: [PATCH] DataUrlSerializer.PATTERN_MIMETYPE add support for MIME Type contains dot or plus, fix #1 --- pom.xml | 2 +- .../dataurl/DataUrlSerializer.java | 2 +- .../dataurl/Base64EncodingTest.java | 52 +++++++++++++++++- .../eu/maxschuster/dataurl/sample-msword.txt | 1 + .../eu/maxschuster/dataurl/sample-wps.txt | 1 + .../eu/maxschuster/dataurl/sample.docx | Bin 0 -> 11263 bytes 6 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/test/resources/eu/maxschuster/dataurl/sample-msword.txt create mode 100644 src/test/resources/eu/maxschuster/dataurl/sample-wps.txt create mode 100644 src/test/resources/eu/maxschuster/dataurl/sample.docx diff --git a/pom.xml b/pom.xml index 8c8da06..9436730 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.20.1 + 2.22.2 diff --git a/src/main/java/eu/maxschuster/dataurl/DataUrlSerializer.java b/src/main/java/eu/maxschuster/dataurl/DataUrlSerializer.java index 80cf87e..df124c3 100644 --- a/src/main/java/eu/maxschuster/dataurl/DataUrlSerializer.java +++ b/src/main/java/eu/maxschuster/dataurl/DataUrlSerializer.java @@ -44,7 +44,7 @@ public class DataUrlSerializer implements IDataUrlSerializer { * Pattern used to check MIME-Types */ private static final Pattern PATTERN_MIMETYPE - = Pattern.compile("^[a-z\\-0-9]+\\/[a-z\\-0-9]+$"); + = Pattern.compile("^[a-z\\-0-9]+\\/[a-z\\-\\.\\+0-9]+$"); /** * IEncoder for {@link DataUrlEncoding#BASE64} encoded {@link DataUrl}s diff --git a/src/test/java/eu/maxschuster/dataurl/Base64EncodingTest.java b/src/test/java/eu/maxschuster/dataurl/Base64EncodingTest.java index 7e28520..82f6818 100644 --- a/src/test/java/eu/maxschuster/dataurl/Base64EncodingTest.java +++ b/src/test/java/eu/maxschuster/dataurl/Base64EncodingTest.java @@ -19,6 +19,8 @@ import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; +import java.nio.charset.StandardCharsets; + import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import org.junit.Test; @@ -39,11 +41,20 @@ public class Base64EncodingTest { private final String checkedTextData; + private final byte[] sampleBinaryData; + + private final String sampleWpsTextData; + + private final String sampleMswordTextData; + public Base64EncodingTest() throws IOException { this.reddotBinaryData = loadBinaryData("reddot.png"); this.reddotTextData = loadTextData("reddot.txt"); this.checkedBinaryData = loadBinaryData("checked.png"); this.checkedTextData = loadTextData("checked.txt"); + this.sampleBinaryData = loadBinaryData("sample.docx"); + this.sampleWpsTextData = loadTextData("sample-wps.txt"); + this.sampleMswordTextData = loadTextData("sample-msword.txt"); } private byte[] loadBinaryData(String name) throws IOException { @@ -59,9 +70,46 @@ private byte[] loadBinaryData(String name) throws IOException { private String loadTextData(String name) throws IOException { byte[] data = loadBinaryData(name); - return new String(data, "UTF-8"); + return new String(data, StandardCharsets.UTF_8); } - + + @Test + public void sampleWpsSerialize() throws MalformedURLException { + DataUrl dataUrl = new DataUrlBuilder() + .setEncoding(DataUrlEncoding.BASE64) + .setData(sampleBinaryData) + .setMimeType("application/wps-office.docx") + .setHeader("name", "这个是测试docx文件.docx") + .build(); + String serialized = serializer.serialize(dataUrl); + assertEquals(sampleWpsTextData, serialized); + } + + @Test + public void sampleWpsUnserialize() throws MalformedURLException { + DataUrl unserialized = serializer.unserialize(sampleWpsTextData); + assertArrayEquals(sampleBinaryData, unserialized.getData()); + } + + @Test + public void sampleMswordSerialize() throws MalformedURLException { + DataUrl dataUrl = new DataUrlBuilder() + .setEncoding(DataUrlEncoding.BASE64) + .setData(sampleBinaryData) + .setMimeType("application/vnd.openxmlformats-officedocument.wordprocessingml.document") + .setHeader("name", "这个是测试docx文件.docx") + .build(); + String serialized = serializer.serialize(dataUrl); + System.out.println("serllll:" + serialized); + assertEquals(sampleMswordTextData, serialized); + } + + @Test + public void sampleMswordUnserialize() throws MalformedURLException { + DataUrl unserialized = serializer.unserialize(sampleMswordTextData); + assertArrayEquals(sampleBinaryData, unserialized.getData()); + } + @Test public void reddotSerialize() throws MalformedURLException { DataUrl dataUrl = new DataUrlBuilder() diff --git a/src/test/resources/eu/maxschuster/dataurl/sample-msword.txt b/src/test/resources/eu/maxschuster/dataurl/sample-msword.txt new file mode 100644 index 0000000..ce98bd3 --- /dev/null +++ b/src/test/resources/eu/maxschuster/dataurl/sample-msword.txt @@ -0,0 +1 @@ +data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;name=%E8%BF%99%E4%B8%AA%E6%98%AF%E6%B5%8B%E8%AF%95docx%E6%96%87%E4%BB%B6.docx;base64,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 \ No newline at end of file diff --git a/src/test/resources/eu/maxschuster/dataurl/sample-wps.txt b/src/test/resources/eu/maxschuster/dataurl/sample-wps.txt new file mode 100644 index 0000000..397fbf8 --- /dev/null +++ b/src/test/resources/eu/maxschuster/dataurl/sample-wps.txt @@ -0,0 +1 @@ +data:application/wps-office.docx;name=%E8%BF%99%E4%B8%AA%E6%98%AF%E6%B5%8B%E8%AF%95docx%E6%96%87%E4%BB%B6.docx;base64,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 \ No newline at end of file diff --git a/src/test/resources/eu/maxschuster/dataurl/sample.docx b/src/test/resources/eu/maxschuster/dataurl/sample.docx new file mode 100644 index 0000000000000000000000000000000000000000..98e6ff3873992dd710dac421f7783e491b51deca GIT binary patch literal 11263 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

(BDRVC1qn&4_vnl|)fF@bF!2cV@G zstuXTi$GqL+7(WFL%j7-75h6YH583~tCL6UN}Wk|?TGEl zIqqBvUvyK9BBg*5o1UT3Lem@$9Kr{K6sq~o%>gdgBfongX>Uyi-%>73ug^=UVhgL+ zi)0Wcfy-X;vBm7&KBY~;vO=p>%AsvpKN}2e>XU>;y;@otT+bN7Jzi$QHB+mc)5D82 ziGh&2$QD2gF@P4Be`x!x#m}tbPgRT}6)XU`68{y*I|Ta`7Sa7led=o2-ThhJazgC| zABoP+d4|gs3^q(h&xSPjuPYpN^IB7gnzohWrVz{_g#0wpWEa703l=!&h-y7fJ&-xk zZIJI~ry>!QP3rL8FLE-ijb*{y3*Nd~VtO2zCGS`*f0Rf&?2yqM{gV5gP&(9DDC3;k zVqg;%B%_q4n~|N1%^JF5JuGCQH>|LEE>*&AXUmZ&|2VI;J4ijtnIw3FjL7(P`SKLd z#r)3IEx5Zo)r|Q$$&+G&QE7{R*OuZLA&N>giklOyC_R4p~p|BlaANHwkUJ@7L_JzBYfCCqaX#h)`X) z6J8~u;?f*FBe5G!Jx&5R8+zZYBAlPS<%xR?8bz!>ZmVr~An8J>#R%Hs8kK z62_nnwKzFB0^qzZA`AkWn>V{H*MghNe&(I1kT5%@UIt{YMH-^s!4bE|m*#^oSHxh5 z0|enfS1ki+K`f>+Aq$&-!$N+|ea0{SU7BP$LAi;>l|99Okyx;mhe_woAPItsEg{yS zvk=3+t!IpLF|3G~F^_82n$W4sBd4utctfI9i2KKfrE&YPbWBZyIcR#&4J0FBX87L9 z(>NyFLU1NrTLEgds#dQVe%7YiQHXhA`1?8AEzJBMn=*Ff;??hhs$IjdF659c3h#?A zn6OnZCD-Du!nVT3ElTg=yv|LcM zw3JBH1^;x`hDG=^+)|TJkfxfhR9#p_pF(J}_04DeY|M|si2{x{H&b0VJ)u3H9&dAIgcC z->1++gG=nOa>fQZh)^7zyNXMYFDOaOGZUH_Hq4GD&D&~`Sz*48rjI_aKA7&sNe1?& zvbjxy%kmB3oEVugNjx5z_DX9B8z7izGuoNP({w&_yHK8Plj7)uiRwv*Dw~p>O1yM; z@Vuyy1AdECAl9i9737AgXpS$3e`~+DGD5sP zlV;*h1@)dB-1BC*jO>Wvb*)uR+YY-!5aTOjR6Plc?o^Hgy@r9M9&fSFB#fr$l>|lwQ-28-2a#w}1SckT{Zi68<8ROh>s>o@1sdke$ z(&N;xHtAIfW9ZUZNdh(dC;NijBJui^wN`q6On|0D7tCUVn^}|z9LQE!J}z)omrgmp z{?Qh_6O3kGLOz_tsSjRGh-JnL`PuiCeTuOY@6d6gq*xdPRvvsXIzxOK@ju#oiw^1BlT|XfVVZ`8i4sQPsCZFq2e(#k3 z#i=77hg%asiX5;b;s1y9KfCKsn*B%GLO>W^L98~ea>XsC54#{ne|J$wZwmgpTI0yb z)MciWLVkORE=NUuzyN*on7hQ+UUHN)r^Gz^mW4bl!tJ#fDBsTU6gp~Xcyl^M_6IV? zgT}3Fo;Axn>eEe>&)LGP^uf95(+6)}B~VFX4j5+Qmc%hea;m?tA>MP+vT=O0;=j@> z7P29DeG4&plPr1m#0uy4{#xV+oxcAy()^Mdxn{e^VBFVU)<|-QCS8}hl;TC$28)Xx z@1_5j)0+Pxhy$kh$31`;R>0nb3;6zdxcf`+-;VfSt5D9OgZ@?5v7aYo&fR+MT?e_7 z8R8yW+cOqd&cKXPzl!@{8XOLx3HU#D91V63Y$X2ifFXEq zmWV1zL!AiR6>nWn2Fig1{)o7K2vPmbPFZzWnOb(ePHezL(eN}wyuBL+7OMp#B4a`8 z*ovTRdL9evXQGqY0@D$UtRmjIfzay2Z-4IQleJIt7Jwy{1UTnXF@PJ-ztmf?iyHP6;4jo*t8bwRMMe7dfI>(0->ge zY7voMa_mghSM*GTv&>=Zk1wNH#v!Of$hze%W$PZFC${knAj1@VJcWm;_3zA&-T!>* zfkR-F>s+KO)p^qD8YA_EXp7e;Cw^RvDoT697n1N>C&=}otxHeddnkBFHPuqh4?kzayb+{-2SXySU3ym40QIH@YDN}s4DQm9gTmsxdXjMI0A;x_ zr4Y@K3F%Z>ZGF`~eslrB;;ZPFs$C)Mt-~f0eNT0B=>CEDJj%1~>NCF}>~~n=s*n!m zdGA@@)=+Kq2-6)d-+1u7aSdR6I|BaI$6jgEMAy44$KvIS!!`iNuoqUvd^ z+zLLrsYR6xkgfm*K?V9%Yh+l&S|AYDY7X7cmeof);!L)GxZQlMD?%5FjYR|vQiT;iI`>p?zqnC#98U1Uz zOaFoX(@efp{blg-yD$GgH29~NmmR!}8-8~n1+YoKE&QKR#Q!4XxsdT!`+*i1^8xnZAN1cgX)-Oql;ul5X?BK~6ocsbdZd&M*G7gLXa0s-^>=LqLtYyS5e z`tsoCcTetsxbf#6^zS}iPUK}U^&4)C_ZR$+(CQ`rWk&Nio)G>o{J-;?FX1n1*M7sD z|K|L6CEG9X{|ozMfVl9d>VIcd{#>Uo^D4hbmH!j?JIf+31^(=80@5&OKv;m)G5Y5D GzyAZ6JyZ<< literal 0 HcmV?d00001