1

我正在尝试让我的 android 手机连接到我的 servlet 并向其发送某个图像。我想我会这样做的方式是使用该copyPixelsToBuffer()函数,然后尝试通过一些输出流将其发送到 servlet(类似于我在普通的独立 java 应用程序中执行此操作的方式)。这种方式行得通吗?如果是这样,我究竟使用什么样的流?我是否应该只使用 DataOutputStream 并执行以下操作:

ByteBuffer imgbuff;
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
bm.copyPixelsToBuffer(bm);

...code...
URLConnection sc = server.openConnection();
sc.setDoOutput(true);

DataOutputStream out = new DataOutputStream( sc.getOutputStream() );
out.write(imgbuff.array());
out.flush();
out.close();

注意:我知道这可能不是使用 Android 操作系统连接到服务器的正确方法,但目前我正在研究如何发送图像,而不是连接(除非这与图像的相关性发送)。

如果这不是您建议将图像发送到 servlet 的一种方式(我认为字节缓冲区最好,但我可能错了),您会如何建议这样做?

4

1 回答 1

2

由于 aHttpServlet通常侦听 HTTP 请求,因此您希望使用multipart/form-data编码通过 HTTP 发送二进制数据,而不是像那样的原始(未格式化)。

从客户端开始,您可以URLConnection按照本迷你教程中的说明使用它,但它会非常冗长。您也可以为此使用Apache HttpComponents Client。但是,这会增加额外的依赖项,我不确定您是否希望在 Android 上使用它。

然后,在服务器端,您可以使用Apache Commons FileUploadmultipart/form-data从编码的请求正文中解析项目。您可以在此答案中找到doPost()servlet 的外观的代码示例。

DataOutputStream至于您的代码示例:不需要包装。你没有利用DataOutputStream's 的设施。您只是在使用由基本返回的write(byte[])方法已经提供的方法。此外,还有一种方法,您可以使用该方法使用更标准和更易于理解的格式(PNG、JPG 等)将其压缩为任意. 例如OutputStreamURLConnection#getOutputStream()Bitmapcompress()OutputStream

output = connection.getOutputStream();
// ...
bitmap.compress(CompressFormat.JPEG, 100, output);  

这样做而不是output.write(bytes)在您的代码中。

于 2010-09-20T20:35:47.977 回答