【问题标题】:android - How to set file name using FileInputStream?android - 如何使用 FileInputStream 设置文件名?
【发布时间】:2014-02-18 00:31:42
【问题描述】:

我正在开发一个应用程序,该应用程序将使用 HTTP 服务器(使用 nanoHTTPD)通过键入发件人的 IP:端口将文件发送到另一台设备。传输工作正常,但我无法接收到已发送文件的正确文件名(接收方的浏览器将其命名为“默认”,没有任何扩展名)。这是我的 HTTP 服务器代码:

私有类 WebServer 扩展 NanoHTTPD { 公共网络服务器() { 超级(8080); } @覆盖 公共响应服务(字符串 uri,方法方法, 地图头,地图参数, 地图文件){ //从意图接收我的文件路径 意图意图 = getIntent(); 字符串文件名 = intent.getStringExtra(MainActivity.FILENAME); FileInputStream 文件 = null; 尝试 { 文件 = 新文件输入流(文件名); } 捕捉(FileNotFoundException e){ e.printStackTrace(); } return new NanoHTTPD.Response(Status.OK, "/", file); }

我想我可以使用 FileInputStream(new File(String path, String name)) 修复它,但它仍然无法正常工作,它仍然给我一个 0 字节文件大小的“默认”文件名。

谁能告诉我如何从 HTTP 服务器获取正确的文件名?希望有人可以在这里帮助我。谢谢!

【问题讨论】:

    标签: android file httpserver nanohttpd


    【解决方案1】:

    这取决于您的服务器(脚本)接受什么,发送时您应该添加带有文件名称的标题,这可以是:

    Content-Disposition: attachment; filename="fname.ext"
    

    来自http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html“19.5.1 Content-Disposition”的示例

    【讨论】:

    • 我不熟悉这个'Content-Disposition',因为我只是从一个Intent(包含一个简单的字符串)中检索文件的路径,这就是我认为我可以设置文件的原因使用其他方法命名。有没有更简单的解决方案?
    • 让我探索一下这个 Content-Disposition,如果它有效,我会回到这里。感谢您提供的链接。
    • 如果文件是通过 HTTP 传输的,那么文件名之类的信息主要在标头中传输。如果您可以在第二台设备上读取标头,那么您可以在充当服务器的设备上设置您喜欢的任何标头。这甚至可以是:"myheader-filename: "myfile.txt""
    • 再次感谢您提供的信息。我目前正在阅读有关 nanoHTTPD 和标头的一些信息。再次感谢!
    • 对于 Apache HTTP 客户端,您使用 ie。 HttpPost.addHeader(HEADER_NAME, HEADER_VALUE),对于 URLConnection 其 addRequestProperty(HEADER_NAME, HEADER_VALUE)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多