使用Scala保存作为多部分表单数据的一部分接收的图像

时间:2012-03-19 15:12:05

标签: image scala

我的服务器从移动应用程序接收多部分表单数据。使用request.content.toString(UTF_8)打印出请求的结果如下所示。移动设备将图像作为base64编码的字符串发送。如何将图像数据保存到文件?

--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value1"

Furniture
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value2"

Chair
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg

����JFIF��XExifMM*�i...rest of image goes here...
--*****org.apache.cordova.formBoundary--

1 个答案:

答案 0 :(得分:0)

我还没有解析多部分表单数据,但保存图像变得简单(一旦你知道如何)。为了测试,我在测试期间仅使用以下方式上传图像:

curl -T "image.jpg" http://127.0.0.1:8080/imageupload

我正在使用依赖于netty库的Finagle,因此request.content()返回一个org.jboss.netty.buffer.ChannelBuffer类型的对象,为此您提取图像数据如下:

将文件从请求内容保存到文件:

  val raf = new java.io.RandomAccessFile("image.jpg", "rw");
  val buf = request.getContent();
  val fChannel = raf.getChannel();

  fChannel.write( buf.toByteBuffer() );
  raf.close();
  fChannel.close();

要将传递请求内容传递给期望base64binary的网络服务:

  import org.jboss.netty.util.CharsetUtil._
  import org.jboss.netty.handler.codec.base64.Base64

  val base64binaryImage = (Base64.encode(request.getContent())).toString(UTF_8)