通过HTTP POST发送二进制和文本数据

3
我试图使用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 =”)吗?

2个回答

2
我建议将您的数据转换为Base64字符串(与所有系统兼容)。
string result = Convert.ToBase64String(Encoding.UTF8.GetBytes(utf8Text));

0

是的,如果要使用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 的文章 如何使用 java.net.URLConnection 发送和处理 HTTP 请求?


问题是,我必须发送二进制文件的内容。我不认为我可以将其添加到“file=”中,对吗? - Non

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接