我的服务器从移动应用程序接收多部分表单数据。使用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--
答案 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)