【发布时间】:2014-07-21 14:33:34
【问题描述】:
我在 Java 桌面环境中使用 NanoHTTPD 网络服务器 2.1.0。 (没有安卓)
一切正常...但不是使用 POST 方法上传文件(表单不支持 PUT)
这是我的 HTML 代码:
<form method="post" enctype="multipart/form-data">
choose a file<br>
<input name="file" type="file" size="50" maxlength="100000"">
<button type="submit">upload</button>
</form>
这是我的服务器方法:
public Response serve(IHTTPSession session) {
if (session.getMethod() == Method.POST) {
Map<String, String> files = new HashMap<String, String>();
session.parseBody(files);
//this prints {file=C:\path-to-java-tmp-files\NanoHTTPD-4635244586997909485}
//the number is always different
System.out.println(files.toString());
} else {
//page containing the index.html including the form
return page;
}
}
这就是问题所在: 临时文件不存在。存在另一个带有不同“数字”的临时文件,这似乎是正确的文件,因为内容与上传文件的内容相同。那么如何获取正确的临时文件名呢?
另一个问题是: 临时文件包含漏洞 POST 内容:
-----------------------------115801144322347
Content-Disposition: form-data; name="file"; filename="filename.txt"
Content-Type: application/octet-stream
-->content of the uploaded file
-----------------------------115801144322347--
如果内容是图片或二进制,这是一个问题。
似乎 NanoHTTPD 对 POST 请求没有任何特殊作用。它总是一样的......将请求保存到 tmp 文件并提供页面。 所以: - 如何获得正确的临时文件? --> 我认为这是一个错误。我得到了正确的路径和名称,但“数字”已损坏。 idk ...如果发生上传,我是否应该临时更改java tmp-path,然后总是删除文件。那么我只有一个独立于任何命名的 tmp 文件吗? - 如何杀死文件中的html请求头
还是我做错了什么?这是将文件上传到 nanohttpd 的正确方法吗?
感谢您的帮助!
【问题讨论】:
-
我知道您在 7 月发布了帖子,但您找到解决方案了吗?我收到损坏的 PNG 文件,因为 NanoHttpd 甚至对二进制文件也使用 readLine()
-
不客气。我没有找到解决方案:(我只是放弃了。