Commit 5813ca7d by songxiang

长短链接下载失败的问题

parent 8a806e9c
...@@ -59,7 +59,6 @@ import com.pcloud.common.utils.string.StringUtil; ...@@ -59,7 +59,6 @@ import com.pcloud.common.utils.string.StringUtil;
/** /**
* @描述: * @描述:
*
* @作者:songx * @作者:songx
* @创建时间:2017年6月26日,下午12:03:44 @版本:1.0 * @创建时间:2017年6月26日,下午12:03:44 @版本:1.0
*/ */
...@@ -121,10 +120,8 @@ public class OssUtils { ...@@ -121,10 +120,8 @@ public class OssUtils {
/** /**
* 本地上传文件到aliOSS,isFlag=true,表示上传成功 * 本地上传文件到aliOSS,isFlag=true,表示上传成功
* *
* @param filePath * @param filePath 源文件物理地址
* 源文件物理地址 * @param fileName 源文件名称,可为null
* @param fileName
* 源文件名称,可为null
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -136,10 +133,8 @@ public class OssUtils { ...@@ -136,10 +133,8 @@ public class OssUtils {
* 本地上传文件到aliOSS,isFlag=true,表示上传成功 <br> * 本地上传文件到aliOSS,isFlag=true,表示上传成功 <br>
* 自定义上传后的文件名称 * 自定义上传后的文件名称
* *
* @param filePath * @param filePath 源文件物理地址
* 源文件物理地址 * @param fileName 源文件名称,可为null
* @param fileName
* 源文件名称,可为null
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -153,12 +148,9 @@ public class OssUtils { ...@@ -153,12 +148,9 @@ public class OssUtils {
/** /**
* byte[]数组文件流上传 ,isFlag=true,表示上传成功 * byte[]数组文件流上传 ,isFlag=true,表示上传成功
* *
* @param buff * @param buff 源文件字节数组
* 源文件字节数组 * @param fileName 源文件名称不带后缀,可为null
* @param fileName * @param fileType 源文件后缀
* 源文件名称不带后缀,可为null
* @param fileType
* 源文件后缀
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -170,12 +162,9 @@ public class OssUtils { ...@@ -170,12 +162,9 @@ public class OssUtils {
* 文件流上传到aliOSS, isFlag=true,表示上传成功 <br/> * 文件流上传到aliOSS, isFlag=true,表示上传成功 <br/>
* 慎用,该方法稳定性不确定,曾出现过上传的文件流丢失的情况 * 慎用,该方法稳定性不确定,曾出现过上传的文件流丢失的情况
* *
* @param is * @param is 源文件流
* 源文件流 * @param fileName 源文件名称不带后缀,可为null
* @param fileName * @param fileType 源文件后缀
* 源文件名称不带后缀,可为null
* @param fileType
* 源文件后缀
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -257,10 +246,8 @@ public class OssUtils { ...@@ -257,10 +246,8 @@ public class OssUtils {
/** /**
* 提交MP4转码作业 * 提交MP4转码作业
* *
* @param fileName * @param fileName 源文件的名称不带后缀,可为null
* 源文件的名称不带后缀,可为null * @param filePath 源文件本地路径
* @param filePath
* 源文件本地路径
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -290,12 +277,9 @@ public class OssUtils { ...@@ -290,12 +277,9 @@ public class OssUtils {
/** /**
* 提交MP4转码作业,文件流方式 * 提交MP4转码作业,文件流方式
* *
* @param buff * @param buff 源文件流
* 源文件流 * @param fileName 源文件的名称不带后缀,可为null
* @param fileName * @param fileType 源文件的后缀
* 源文件的名称不带后缀,可为null
* @param fileType
* 源文件的后缀
* @return * @return
*/ */
public static String submitTranscodeJobMp4(byte[] buff, String fileName, String fileType) throws FileException { public static String submitTranscodeJobMp4(byte[] buff, String fileName, String fileType) throws FileException {
...@@ -312,10 +296,8 @@ public class OssUtils { ...@@ -312,10 +296,8 @@ public class OssUtils {
/** /**
* 提交MP3转码作业 * 提交MP3转码作业
* *
* @param fileName * @param fileName 源文件的名称不带后缀,可为null
* 源文件的名称不带后缀,可为null * @param filePath 源文件本地路径
* @param filePath
* 源文件本地路径
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -346,12 +328,9 @@ public class OssUtils { ...@@ -346,12 +328,9 @@ public class OssUtils {
* 提交MP3转码作业,文件流方式 <br/> * 提交MP3转码作业,文件流方式 <br/>
* 使用byte[]方式上传,文件流上传容易导致读取长度0,造成转码失败 * 使用byte[]方式上传,文件流上传容易导致读取长度0,造成转码失败
* *
* @param is * @param is 源文件流
* 源文件流 * @param fileName 源文件的名称不带后缀,可为null
* @param fileName * @param fileType 源文件的后缀
* 源文件的名称不带后缀,可为null
* @param fileType
* 源文件的后缀
* @return * @return
*/ */
@Deprecated @Deprecated
...@@ -368,12 +347,9 @@ public class OssUtils { ...@@ -368,12 +347,9 @@ public class OssUtils {
/** /**
* 提交MP3转码作业 * 提交MP3转码作业
* *
* @param buff * @param buff 文件
* 文件 * @param fileName 源文件的名称不带后缀,可为null
* @param fileName * @param fileType 上传的文件后缀
* 源文件的名称不带后缀,可为null
* @param fileType
* 上传的文件后缀
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -404,10 +380,8 @@ public class OssUtils { ...@@ -404,10 +380,8 @@ public class OssUtils {
/** /**
* 转码作业 * 转码作业
* *
* @param fileName * @param fileName 文件名称
* 文件名称 * @param filePath 文件地址
* @param filePath
* 文件地址
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -420,12 +394,9 @@ public class OssUtils { ...@@ -420,12 +394,9 @@ public class OssUtils {
* 转码作业 * 转码作业
* *
* @param fileName * @param fileName
* @param fileUrl * @param fileUrl 文件地址
* 文件地址 * @param outFileType 输出文件类型
* @param outFileType * @param waterMarkContent 视频水印文本,如果不需要水印传null
* 输出文件类型
* @param waterMarkContent
* 视频水印文本,如果不需要水印传null
* @return [0]:jobId,[1]:转码后的地址 * @return [0]:jobId,[1]:转码后的地址
*/ */
public static String[] transcodeJobEx(String fileName, String fileUrl, String outFileType, public static String[] transcodeJobEx(String fileName, String fileUrl, String outFileType,
...@@ -508,10 +479,8 @@ public class OssUtils { ...@@ -508,10 +479,8 @@ public class OssUtils {
/** /**
* 视频文件合并,异步方法 * 视频文件合并,异步方法
* *
* @param fileUrl * @param fileUrl 主文件地址
* 主文件地址 * @param mergeUrls 需要合并的子文件列表,最多支持4个
* @param mergeUrls
* 需要合并的子文件列表,最多支持4个
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -542,10 +511,8 @@ public class OssUtils { ...@@ -542,10 +511,8 @@ public class OssUtils {
/** /**
* 视频文件合并,同步方法 * 视频文件合并,同步方法
* *
* @param fileUrl * @param fileUrl 主文件地址
* 主文件地址 * @param mergeUrls 需要合并的子文件列表,最多支持4个
* @param mergeUrls
* 需要合并的子文件列表,最多支持4个
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -587,14 +554,10 @@ public class OssUtils { ...@@ -587,14 +554,10 @@ public class OssUtils {
/** /**
* 转码作业 * 转码作业
* *
* @param inputFile * @param inputFile 输入文件
* 输入文件 * @param templateId 转码模板
* @param templateId * @param outObjectKey 转码输出对象地址
* 转码模板 * @param waterMarkConfigArray 水印参数
* @param outObjectKey
* 转码输出对象地址
* @param waterMarkConfigArray
* 水印参数
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -662,7 +625,7 @@ public class OssUtils { ...@@ -662,7 +625,7 @@ public class OssUtils {
JSONArray mergeJsons = new JSONArray(); JSONArray mergeJsons = new JSONArray();
for (String mergeUrl : mergeUrls) { for (String mergeUrl : mergeUrls) {
// 如果是本地文件先上传 // 如果是本地文件先上传
if (!StringTools.startsWith(mergeUrl, new String[] { "http://", "https://" })) { if (!StringTools.startsWith(mergeUrl, new String[]{"http://", "https://"})) {
UploadResultInfo uploadResultInfo = uploadLocalFile(mergeUrl, null); UploadResultInfo uploadResultInfo = uploadLocalFile(mergeUrl, null);
if (!uploadResultInfo.isFlag()) { if (!uploadResultInfo.isFlag()) {
continue; continue;
...@@ -710,10 +673,8 @@ public class OssUtils { ...@@ -710,10 +673,8 @@ public class OssUtils {
* *
* @param fileName * @param fileName
* @param filePath * @param filePath
* @param seek * @param seek 开始时间:[0.000,86399.999]
* 开始时间:[0.000,86399.999] * @param duration 持续时长 [0.000,86399.999]
* @param duration
* 持续时长 [0.000,86399.999]
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -753,10 +714,8 @@ public class OssUtils { ...@@ -753,10 +714,8 @@ public class OssUtils {
* @param buff * @param buff
* @param fileName * @param fileName
* @param fileType * @param fileType
* @param seek * @param seek 开始时间:[0.000,86399.999]
* 开始时间:[0.000,86399.999] * @param duration 持续时长 [0.000,86399.999]
* @param duration
* 持续时长 [0.000,86399.999]
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -778,10 +737,8 @@ public class OssUtils { ...@@ -778,10 +737,8 @@ public class OssUtils {
* *
* @param inputFile * @param inputFile
* @param outObjectKey * @param outObjectKey
* @param seek * @param seek 开始时间:[0.000,86399.999]
* 开始时间:[0.000,86399.999] * @param duration 持续时长 [0.000,86399.999]
* @param duration
* 持续时长 [0.000,86399.999]
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -828,10 +785,8 @@ public class OssUtils { ...@@ -828,10 +785,8 @@ public class OssUtils {
/** /**
* 组装剪切参数 * 组装剪切参数
* *
* @param seek * @param seek 开始时间:sssss[.SSS]
* 开始时间:sssss[.SSS] * @param duration 持续时长 sssss[.SSS]
* @param duration
* 持续时长 sssss[.SSS]
* @return * @return
*/ */
private static JSONObject generateClipInput(String seek, String duration) { private static JSONObject generateClipInput(String seek, String duration) {
...@@ -849,8 +804,7 @@ public class OssUtils { ...@@ -849,8 +804,7 @@ public class OssUtils {
* 提交视频截图任务,成功返回图片地址 <br> * 提交视频截图任务,成功返回图片地址 <br>
* *
* @param fileUrl * @param fileUrl
* @param time * @param time 秒
* 秒
* @return 成功:图片地址,失败:null * @return 成功:图片地址,失败:null
*/ */
public static String submitSnapshotJob(String fileUrl, int time) { public static String submitSnapshotJob(String fileUrl, int time) {
...@@ -1261,7 +1215,7 @@ public class OssUtils { ...@@ -1261,7 +1215,7 @@ public class OssUtils {
* 获取文件下载加密密钥,长期有效 <br> * 获取文件下载加密密钥,长期有效 <br>
* 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br> * 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br>
* *
* @param objectKey * @param fileUrl
* @return * @return
*/ */
public static String getHashValueLong(String fileUrl) { public static String getHashValueLong(String fileUrl) {
...@@ -1272,9 +1226,8 @@ public class OssUtils { ...@@ -1272,9 +1226,8 @@ public class OssUtils {
* 获取文件下载加密密钥 <br> * 获取文件下载加密密钥 <br>
* 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br> * 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br>
* *
* @param objectKey * @param fileUrl
* @param second * @param second 秒,地址有效期
* 秒,地址有效期
* @return * @return
*/ */
public static String getHashValue(String fileUrl, long second) { public static String getHashValue(String fileUrl, long second) {
...@@ -1294,8 +1247,7 @@ public class OssUtils { ...@@ -1294,8 +1247,7 @@ public class OssUtils {
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br>
* 默认有效期48小时 * 默认有效期48小时
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址
* @return * @return
*/ */
public static String urlAddKey(String fileUrl) { public static String urlAddKey(String fileUrl) {
...@@ -1306,8 +1258,7 @@ public class OssUtils { ...@@ -1306,8 +1258,7 @@ public class OssUtils {
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br>
* 长期有效 * 长期有效
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址
* @return * @return
*/ */
public static String urlAddKeyLong(String fileUrl) { public static String urlAddKeyLong(String fileUrl) {
...@@ -1317,13 +1268,28 @@ public class OssUtils { ...@@ -1317,13 +1268,28 @@ public class OssUtils {
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br>
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址 * @param second 秒,地址有效期
* @param second
* 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKey(String fileUrl, long second) { public static String urlAddKey(String fileUrl, long second) {
String result = keyCheckFile(fileUrl);
return ZSEncode.encodeURI(result) + getHashValue(result, second);
}
/**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问(不转义中文) <br>
*
* @param fileUrl 文件URL全路径地址
* @param second 秒,地址有效期
* @return
*/
public static String urlAddKeyChina(String fileUrl, long second) {
String result = keyCheckFile(fileUrl);
return result + getHashValue(result, second);
}
private static String keyCheckFile(String fileUrl) {
if (StringUtil.isEmpty(fileUrl)) { if (StringUtil.isEmpty(fileUrl)) {
return null; return null;
} }
...@@ -1335,16 +1301,14 @@ public class OssUtils { ...@@ -1335,16 +1301,14 @@ public class OssUtils {
return fileUrl; return fileUrl;
} }
// 替换域名为可访问的 // 替换域名为可访问的
fileUrl = StringTools.replace(fileUrl, AliyunConstant.RAYS_CDN_URLS, AliyunConstant.FILE_CDN_URL_DOWNLOAD); return StringTools.replace(fileUrl, AliyunConstant.RAYS_CDN_URLS, AliyunConstant.FILE_CDN_URL_DOWNLOAD);
return ZSEncode.encodeURI(fileUrl) + getHashValue(fileUrl, second);
} }
/** /**
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br>
* 默认有效期48小时 * 默认有效期48小时
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址
* @return * @return
*/ */
public static String urlAddKey2Sms(String fileUrl) { public static String urlAddKey2Sms(String fileUrl) {
...@@ -1355,8 +1319,7 @@ public class OssUtils { ...@@ -1355,8 +1319,7 @@ public class OssUtils {
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br>
* 长期有效 * 长期有效
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址
* @return * @return
*/ */
public static String urlAddKeyLong2Sms(String fileUrl) { public static String urlAddKeyLong2Sms(String fileUrl) {
...@@ -1366,10 +1329,8 @@ public class OssUtils { ...@@ -1366,10 +1329,8 @@ public class OssUtils {
/** /**
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br>
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址 * @param second 秒,地址有效期
* @param second
* 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKey2Sms(String fileUrl, long second) { public static String urlAddKey2Sms(String fileUrl, long second) {
...@@ -1385,7 +1346,7 @@ public class OssUtils { ...@@ -1385,7 +1346,7 @@ public class OssUtils {
* @return * @return
*/ */
public static String urlAddKeyLong2SmsOwn(String fileUrl) { public static String urlAddKeyLong2SmsOwn(String fileUrl) {
String keyUrl = urlAddKey(fileUrl, AliyunConstant.OSS_LONG_TIME); String keyUrl = urlAddKeyChina(fileUrl, AliyunConstant.OSS_LONG_TIME);
String shortUrl = UrlUtils.getShortUrl4Own(keyUrl); String shortUrl = UrlUtils.getShortUrl4Own(keyUrl);
return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl.replace(UrlConstant.OWN_SHORT_URL, ""); return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl.replace(UrlConstant.OWN_SHORT_URL, "");
} }
...@@ -1393,8 +1354,7 @@ public class OssUtils { ...@@ -1393,8 +1354,7 @@ public class OssUtils {
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br>
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址
* @return * @return
*/ */
public static String urlAddKey2Short(String fileUrl) { public static String urlAddKey2Short(String fileUrl) {
...@@ -1405,8 +1365,7 @@ public class OssUtils { ...@@ -1405,8 +1365,7 @@ public class OssUtils {
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 ,并转换为短链接<br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问 ,并转换为短链接<br>
* 长期有效 * 长期有效
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址
* @return * @return
*/ */
public static String urlAddKeyLong2Short(String fileUrl) { public static String urlAddKeyLong2Short(String fileUrl) {
...@@ -1416,14 +1375,12 @@ public class OssUtils { ...@@ -1416,14 +1375,12 @@ public class OssUtils {
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br>
* *
* @param fileUrl * @param fileUrl 文件URL全路径地址
* 文件URL全路径地址 * @param second 秒,地址有效期
* @param second
* 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKey2Short(String fileUrl, long second) { public static String urlAddKey2Short(String fileUrl, long second) {
String keyUrl = urlAddKey(fileUrl, second); String keyUrl = urlAddKeyChina(fileUrl, second);
String shortUrl = UrlUtils.getShortUrl4Own(keyUrl); String shortUrl = UrlUtils.getShortUrl4Own(keyUrl);
return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl; return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl;
} }
...@@ -1457,8 +1414,7 @@ public class OssUtils { ...@@ -1457,8 +1414,7 @@ public class OssUtils {
* 图片缩放,按宽度等比例缩放 * 图片缩放,按宽度等比例缩放
* *
* @param fileUrl * @param fileUrl
* @param width * @param width 目前最大支持1024,超过1024或者小于0都按1024计算
* 目前最大支持1024,超过1024或者小于0都按1024计算
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1481,8 +1437,7 @@ public class OssUtils { ...@@ -1481,8 +1437,7 @@ public class OssUtils {
* 图片缩放,按倍数百分比缩放 * 图片缩放,按倍数百分比缩放
* *
* @param fileUrl * @param fileUrl
* @param p * @param p 1-1000,倍数百分比。 小于100,即是缩小,大于100即是放大。
* 1-1000,倍数百分比。 小于100,即是缩小,大于100即是放大。
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1505,8 +1460,7 @@ public class OssUtils { ...@@ -1505,8 +1460,7 @@ public class OssUtils {
* 图片自动旋转 * 图片自动旋转
* *
* @param fileUrl * @param fileUrl
* @param width * @param width 图片旋转以后的宽度,最大不能超过4096,传0则按原始宽度旋转
* 图片旋转以后的宽度,最大不能超过4096,传0则按原始宽度旋转
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1532,14 +1486,10 @@ public class OssUtils { ...@@ -1532,14 +1486,10 @@ public class OssUtils {
* 图片裁剪,如果图片带有旋转属性,会自动旋转纠正角度后在进行裁剪。 * 图片裁剪,如果图片带有旋转属性,会自动旋转纠正角度后在进行裁剪。
* *
* @param fileUrl * @param fileUrl
* @param width * @param width 裁剪的宽度
* 裁剪的宽度 * @param height 裁剪的高度
* @param height * @param x 左上角开始, 裁剪的X轴坐标
* 裁剪的高度 * @param y 左上角开始, 裁剪的Y轴坐标
* @param x
* 左上角开始, 裁剪的X轴坐标
* @param y
* 左上角开始, 裁剪的Y轴坐标
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1591,12 +1541,9 @@ public class OssUtils { ...@@ -1591,12 +1541,9 @@ public class OssUtils {
/** /**
* 图片增加水印(文本) * 图片增加水印(文本)
* *
* @param fileUrl * @param fileUrl 原图地址
* 原图地址 * @param fontSize 字体大小
* @param fontSize * @param watermarkContent 水印内容
* 字体大小
* @param watermarkContent
* 水印内容
* @return * @return
* @throws FileException * @throws FileException
*/ */
...@@ -1625,10 +1572,8 @@ public class OssUtils { ...@@ -1625,10 +1572,8 @@ public class OssUtils {
/** /**
* 图片增加水印(图片) * 图片增加水印(图片)
* *
* @param fileUrl * @param fileUrl 原图地址
* 原图地址 * @param watermarkImageUrl 水印图片地址
* @param watermarkImageUrl
* 水印图片地址
* @return * @return
* @throws FileException * @throws FileException
*/ */
......
...@@ -113,9 +113,9 @@ public class ZSEncode { ...@@ -113,9 +113,9 @@ public class ZSEncode {
case '#': case '#':
sb.append("%23"); sb.append("%23");
break; break;
case '%': // case '%':
sb.append("%25"); // sb.append("%25");
break; // break;
case '&': case '&':
sb.append("%26"); sb.append("%26");
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment