使用 java 将文本和图像发送到 php


Send text and image to php with java

这是我关于stackoverflow的第一个问题,所以如果你对我提出/解释它的方式有任何评论,我很乐意接受任何指示。

所以这里是:

我想将文本和图像发送到服务器上的 php 脚本。我可以成功地将两者分开,但不能一起发送。到目前为止,我将其用于字符串:

String dataSend = URLEncoder.encode("User","UTF-8") +"="+URLEncoder.encode(username,"UTF-8");
URL url = new URL(urlCopyImage);            
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());    
out.write(dataSend);
out.close();

对于我使用的图像:

URL url = new URL(urlCopyImage);            
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
ImageIO.write(image,"PNG", connection.getOutputStream());

我可以以某种方式将这两者结合起来吗?

在 php 脚本中,我只使用 $_POST 来接收字符串,对于我使用的图像:

$incomingData = file_get_contents('php://input');  

欢迎任何提示。

作为记录,我使用 php 文件在服务器上创建一个包含此图像的文件。用户名对于指定目录很有用。

编辑:

多亏了你的回答,我已经能够让它工作,虽然我还不太明白。

    MultipartEntity multipart = new MultipartEntity();
    multipart.addPart("User", new StringBody(username));
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(image, "png", os);
    InputStream is = new ByteArrayInputStream(os.toByteArray());
    ContentBody cb = new InputStreamBody(is, "something.png");
    multipart.addPart("Image", cb);
    HttpPost post = new HttpPost(urlCopyImage);
    post.setEntity(multipart);
    HttpClient client = new DefaultHttpClient();
    HttpResponse response = client.execute(post);

我正在向内容正文递给一个输入流正文,该输入流体从 ImageIO 获取字节流。真棒。但我没有得到的是输入流体的第二个参数应该做什么。虽然这有效,但感觉不对。

顺便说一句,这是 php 代码:

$user = $_POST['User'];
copy($_FILES['Image']['tmp_name'],$filename);

如果有人能解释我在这里到底在做什么,我将不胜感激。感谢您的帮助!

使用 Apache HTTP 客户端发出 MIME 类型的 multipart/form-data 的 POST 请求,并为二进制数据和文本添加部分。

在 PHP 端,您可以通过 $_FILE 读取文件

看看我前段时间写的这篇博文 http://zybnet.com/java-http-client-and-post-requests/