Java 如何从内容处置中读取编码文件名

Java 如何从内容处置中读取编码文件名,java,web-services,https,http-headers,Java,Web Services,Https,Http Headers,我得到的内容处置标题值如下 附件;文件名*=UTF-8“album.jpeg 如何从中提取文件名(album.jpeg)。查看该值时,它具有编码格式值。中定义了文件名*参数 要使用java解码文件名,请执行以下操作: String contentd = "attachment;filename*=UTF-8''album.jpeg"; String filename = java.net.URLDecoder.decode(contentd.substring(contentd.indexOf(

我得到的内容处置标题值如下

附件;文件名*=UTF-8“album.jpeg


如何从中提取文件名(album.jpeg)。查看该值时,它具有编码格式值。

中定义了
文件名*
参数

要使用java解码文件名,请执行以下操作:

String contentd = "attachment;filename*=UTF-8''album.jpeg";
String filename = java.net.URLDecoder.decode(contentd.substring(contentd.indexOf("''")+2), "UTF-8");

filename*
参数在中定义

要使用java解码文件名,请执行以下操作:

String contentd = "attachment;filename*=UTF-8''album.jpeg";
String filename = java.net.URLDecoder.decode(contentd.substring(contentd.indexOf("''")+2), "UTF-8");
使用Spring(自5.0版起)解析它。如果您负担不起将Spring作为依赖项添加到项目中,那么可以使用此实现(原始
ContentDisposition
stripped)

import java.io.ByteArrayOutputStream;
导入java.io.UnsupportedEncodingException;
导入java.nio.charset.charset;
导入java.nio.charset.StandardCharset;
导入java.util.ArrayList;
导入java.util.List;
导入静态java.nio.charset.StandardCharsets.ISO_8859_1;
导入静态java.nio.charset.StandardCharsets.UTF_8;
公共班机{
公共静态void main(字符串[]args){
字符串文件名=ContentDispositionFileNameParser.parse(“附件;文件名*=UTF-8'%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B5%20%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.txt”);
System.out.println(文件名);
}
}
/*
*版权所有2002-2020原作者。
*
*根据Apache许可证2.0版(以下简称“许可证”)获得许可;
*除非遵守许可证,否则不得使用此文件。
*您可以通过以下方式获得许可证副本:
*
*      https://www.apache.org/licenses/LICENSE-2.0
*
*除非适用法律要求或书面同意,软件
*根据许可证进行的分发是按“原样”进行分发的,
*无任何明示或暗示的保证或条件。
*请参阅许可证以了解管理权限和权限的特定语言
*许可证下的限制。
*/
/**
*解析RFC 6266中定义的内容处置HTTP头的“filename”参数。
*
*@作者塞巴斯蒂安·德勒兹
*@作者尤尔根·霍勒
*@作者Rossen Stoyanchev
*/
最终类ContentDispositionFileNameParser{
私有静态最终字符串无效_头_字段_参数_格式=“无效头字段参数格式(如RFC 5987中定义)”;
/**
*解析RFC2183中定义的{@literal Content Disposition}头值。
*
*@param contentDisposition{@literal Content Disposition}头值
*@return返回{@literal filename}参数的值(或
*{@literal filename*}一个按照RFC 5987中的定义进行解码),或者{@code null}如果没有定义。
*/
公共静态字符串解析(字符串contentDisposition){
列表部分=标记化(contentDisposition);
字符串文件名=null;
字符集字符集;
对于(int i=1;i=0?headerValue.substring(0,索引):headerValue.trim();
if(type.isEmpty()){
抛出新的IllegalArgumentException(“内容处置头不能为空”);
}
列表部件=新的ArrayList();
零件。添加(类型);
如果(索引>=0){
做{
int nextIndex=指数+1;
布尔引号=假;
布尔值=假;
while(nextIndex