gpt4 book ai didi

android - 带有输入流的 httpclient 多部分发布

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:37 25 4
gpt4 key购买 nike

我正在为 HTTP multipart post 寻找简单干净的解决方案,它将发送一些字符串(表单数据)和几个支持流式传输的文件。 (需要流式传输文件以避免内存不足错误)如果可能的话,我想使用内置的“org.apache.httpclient”来实现这一点。

我能够使用 HttpURLConnection 创建一个干净的解决方案。尽管我为此解决方案付出了所有努力,但字符串还是以 8859-x 编码而不是 UTF-8 编码发送。

编辑:我的代码可在 MultiPart with HttpURLConnection source 获得

我用这段代码创建了一个输出流:

HttpURLConnection connection = setupConnection();
dataOutputStream = new DataOutputStream(connection.getOutputStream());

在此之后我只是用 dataOutputStream.writeBytes 写入数据

如果我可以从 httpclient 获得输出流,那就太好了,但它似乎以不同的方式工作。

感谢任何帮助。谢谢

最佳答案

我刚刚为此创建了一个简单的解决方案:android_multipart_entity .

它是免费的(包括用于商业用途),但是如果可能的话,请在我的类(class)中保留对我的引用。

它旨在与内置的 Android HttpClient 一起使用。示例使用代码:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yourhost.com");
MultipartEntity entity = new MultipartEntity();
entity.addPart(new StringPart("name", "yourname"));
File imageFile = // .. get your image file
entity.addPart(new FilePart("picture", imageFile, null, "image/jpeg"));
httppost.setEntity(entity);
HttpResponse httpResponse = httpclient.execute(httppost);

编辑:

我查看了您的 MultiPart with HttpURLConnection 代码。由于使用 DataOutputStream,您会遇到 UTF-8 问题。 API 表示该类:

Wraps an existing OutputStream and writes big-endian typed data to it. Typically, this stream can be read in by DataInputStream.

这个类(class)不适合您的需要。为了读取数据,您必须在另一端有它的对立面 - DataInputStream

所以我的建议是使用普通的 OutputStream。并向其写入字节。像这样:

outputStream.write(partSeparator.getBytes());
outputStream.write(("Content-Disposition: form-data; name=\"" + parameter.getKey() + "\"" + lineEnd).getBytes());
outputStream.write(("Content-Type: text/plain; charset=UTF-8" + lineEnd).getBytes());
outputStream.write(("Content-Transfer-Encoding: 8bit" + lineEnd).getBytes());
outputStream.write(lineEnd.getBytes());
outputStream.write(parameter.getValue().getBytes("UTF-8")); // <= this is it!
outputStream.write(lineEnd.getBytes());
outputStream.write(partSeparator.getBytes());

关于android - 带有输入流的 httpclient 多部分发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8173914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com