NanoHTTPD建服务端遇到前端<input type=‘file‘>文件传输及乱码解决

NanoHTTPD建服务端遇到前端上传文件例如:

<input type='file' ........>

这时候表单提交需要使用multipart/form-data,例如:

<form method="post" enctype="multipart/form-data">
	<label for="file">upload</label>
    <input type="file" id="file" name="file">
    <input type="submit" value="anything">
</form>

根据前端例子后端要获取这文件的方式是,在NanoHTTPD重写的serve方法中如下处理:

	@Override
    public Response serve(IHTTPSession session) {
    ....//省略
    Method method = session.getMethod();
    Map<String, String> files = new HashMap<>();
    Map<String, String> params = session.getParms();
    ...//省略其他业务流程
    if (Method.POST.equals(method)){
    	try{
    		session.parseBody(files);
    	} catch (Exception e) {
            e.printStackTrace();
        }
        params = session.getParms();
    	//获取文件的核心
    	final String filePath = files.get("file");
    	final File file = new File(filePath);
    	//文件名获取
    	String filename = params.get("file");
    	//这里的filename其实是前端的一个路径,比如D:\filename.png
    	//todo 字符串处理获取真的filename
    	...//省略业务逻辑
    }

上面简单写了一下获取NanoHTTPD服务端怎么获取文件,filename获取方式很多文章用的解析头,因为如果NanoHTTPD,你用上面我们获取的file对象的getname方法获取的是一个NanoHTTPDXXXXXXXXXXX的文件名,但是在头里面有存文件名,个人觉得这个方法太复杂。
上面例子里的核心语句files.get(“file”)里面的file跟input里面的name=‘file’对应。

按理上面已经完成了整个前端上传,后端获取的流程。但是如果你的文件路径包括文件名中出现中文,因为enctype=“multipart/form-data”,前端没有编码后端获取中文是一个乱码。

这里提供一个乱码的解决方案,也是来源于网络。
首先前端指定编码方式为utf-8,可以再meta指定,也可以再form中指定。

后端写法:

@Override
    public Response serve(IHTTPSession session) {
   		//add
    	ContentType ct = new ContentType(session.getHeaders().get("content-type")).tryUTF8();
    	session.getHeaders().put("content-type", ct.getContentTypeHeader());
    	....//接着原来写
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值