首页 > 编程知识 正文

linux上传文件名乱码,java上传文件中文乱码

时间:2023-05-05 13:43:09 阅读:127826 作者:2865

参考资料

Springboot为描述资源提供了适当的接口,主要实现类为ClassPathResource、FileSystemResource、UrlResource、ByteArrayResource、servletconces

ClassPathResource可用于检索类路径下的资源文件。 如果存在位于类路径下的资源文件test.txt,则可以通过指定相应资源文件的类路径下的路径path、newclasspathresource(「test.txt”)来获取该文件。

要获取文件系统中的资源,请使用文件系统资源。 可以根据资源文件的文件路径生成文件系统资源。 文件系统资源还可以将内容写入相应的资源文件。 当然,前提是当前资源文件是可写的。 这可以通过其isWritable ()方法来确定。 FileSystemResource公开了相应资源文件的输出流,可以通过getOutputStream ()方法获得。

URL资源可用于表示与URL对应的资源,从而方便地封装URL。 可以通过指定URL地址来生成URL资源。

ByteArrayResource是为字节数组封装的资源,需要字节数组才能生成。

ServletContextResource是ServletContext封装的资源,用于访问ServletContext环境中的资源。 ServletContextResource具有对ServletContext的引用,其基础是通过ServletContext的getResource (方法和getResourceAsStream ) )方法获取资源

InputStreamResource是为输入流封装的资源,其生成需要输入流。

Resource接口主要定义了以下方法:

exists () :用于确定对应的资源是否真的存在。

isReadable (:用于确定相应资源的内容是否可读。 必须注意的是,如果结果为true,则该内容不一定真的可以读取,但如果返回false,则该内容一定不能读取。

isOpen ) :用于确定当前资源是否表示打开的输入流。 如果结果为真,则无法多次读取当前资源的输入流。 此外,读取后必须关闭,以防止内存泄漏。 此方法主要面向InputStreamResource,在实现类中只有它返回true,否则返回false。

getURL () :返回与当前资源相对应的URL。 如果当前资源无法解析为URL,则抛出异常。 对于ByteArrayResource,无法解析为URL。

返回与getFile ()当前资源相对应的File。 如果当前资源无法通过绝对路径解析为文件,则会抛出异常。 对于ByteArrayResource,无法解析为一个文件。

getInputStream () :获取当前资源代表的输入流。 每当调用getInputStream ()方法时,非InputStream resource resource实现类都会返回新的inputstream。

还有类似于Java文件的接口,如getName和getContenLength。

如果需要获取本地文件系统的指定路径下的文件,有多种方法

在响应实体中实现

通过编写HttpServletResponse的输出流实现

第一种方法是通过封装响应实体将文件流写入主体。 请在这里注意。 文件的格式必须根据特定文件的类型进行设置。 通常,默认值为应用程序/octet-stream。 在标头中设置缓存和文件的名称。 写入文件的名称后,可以避免文件随机生成名称而无法识别的问题。

遇到中文文件名需要转码处理

//设置下载时的文件名。 中文文件名需要转码。 否则就是乱码

headers.add (内容位置),

'附件; filename='

newstring(file.getfilename ().getbytes ) ) utf-8 )、(iso-8859-1 ) )

java

@requestmapping(value='/down ',method=RequestMethod.GET ) )。

publicresponseentitydownloadfile (

throws IOException {

字符串文件路径=' d :/spring实战(第4版(.pdf );

filesystemresourcefile=newfilesystemresource;

httpheadersheaders=newhttpheaders (;

headers.add(cache-control )、) no-cache、no-store、must-revalidate );

//设置下载时的文件名。 中文文件名需要转码。 否则就是乱码

headers.add (内容位置),

'附件; filename='

newstring(file.getfilename ().getbytes ) ) utf-8 )、(iso-8859-1 ) )

headers.add('pragma )、' no-cache );

headers.add('expires ','0' );

返回响应实体

.确定() )。

. headers(headers ) )。

. contentlength (file.contentlength ) )

. content type (media type.parse media type (应用程序/octet-stream ) )

. body (文件);

}

转载于链接:https://my.oschina.net/ahao boy/blog/1843572

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。