【问题标题】:Sending Binary and Textdata via HTTP POST通过 HTTP POST 发送二进制和文本数据
【发布时间】:2012-02-18 16:20:03
【问题描述】:

我尝试使用 HTTP POST 将一些数据发送到服务器。 服务器需要 $_POST['file'] 中的二进制数据。

        URL url = new URL("http://example.com");
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);
        OutputStream outputStream =  connection.getOutputStream();
        outputStream.write("file=".getBytes());

                //byte[] buffer contains the data
            outputStream.write(buffer);         
        outputStream.close();

OutputStream.write 是写入流的正确方法吗?除了缓冲区,我还必须处理字符串(“file =”)吗?

【问题讨论】:

    标签: java http streamwriter


    【解决方案1】:

    是的,要使用POST 写入文本,您需要写入`OutputStream。

    对于参数,您需要创建一个键值对字符串(用&分隔)并将该数据的字节数组写入OutputStream,如下所示:

    String parameterString = "file=" + parameters.get("file") + "&" + "other=" + parameter.get("other");
    outputStream.write(parameterString.getBytes("UTF-8"); //Don't forget, HTTP protocol supports UTF-8 encoding.
    outputStream.flush();
    

    要使用URLConnection进行文件上传,请参阅BalusC的文章How to use java.net.URLConnection to fire and handle HTTP requests?

    【讨论】:

    • 问题是,我必须发送二进制文件的内容。我不认为我可以将它添加到“file =”,可以吗?
    【解决方案2】:

    我建议将您的数据转换为 Base64 字符串(与所有系统兼容)。

    string result = Convert.ToBase64String(Encoding.UTF8.GetBytes(utf8Text));
    

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 2012-01-02
      • 2011-03-04
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多