Apache flex 尝试将动态绘制的图像从Flex上载到包含多部分表单内容的Rails 3时出错
我正在尝试编写一个小flex应用程序,它具有绘画/画布类型的功能来绘制图像,然后我想将其发布到rails服务器端。我正在关注帖子,但由于以下错误,无法达到他所做的程度: NoMethodError(未定义的#的“倒带”方法): 我在谷歌上搜索了一下,发现问题是由于文件名为空,但我想我在示例中看到了这个问题。然而,我改变了示例,通过减少表单参数来简化帖子,但是我可能很容易搞糟一些事情,因为我真的不知道我在用这个多部分表单内容做什么 我希望至少记录请求参数,但不幸的是我不能,因为它在路由之前失败了,而且我对rails缺乏经验。我会在一个单独的问题中问这个问题,希望能够用request参数编辑这个问题 这是我的密码:Apache flex 尝试将动态绘制的图像从Flex上载到包含多部分表单内容的Rails 3时出错,apache-flex,ruby-on-rails-3,Apache Flex,Ruby On Rails 3,我正在尝试编写一个小flex应用程序,它具有绘画/画布类型的功能来绘制图像,然后我想将其发布到rails服务器端。我正在关注帖子,但由于以下错误,无法达到他所做的程度: NoMethodError(未定义的#的“倒带”方法): 我在谷歌上搜索了一下,发现问题是由于文件名为空,但我想我在示例中看到了这个问题。然而,我改变了示例,通过减少表单参数来简化帖子,但是我可能很容易搞糟一些事情,因为我真的不知道我在用这个多部分表单内容做什么 我希望至少记录请求参数,但不幸的是我不能,因为它在路由之前失败了,
public static function sendPic(simplePaint : SimplePaint) : void {
var jpgSource:BitmapData = new BitmapData (simplePaint.width, simplePaint.height);
jpgSource.draw(simplePaint);
var jpgEncoder:JPEGEncoder = new JPEGEncoder(85);
var ba:ByteArray = jpgEncoder.encode(jpgSource);
var request:URLRequest = new URLRequest("../drawings");
request.method = URLRequestMethod.POST;
var boundary : String = "----------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7";
request.contentType = "multipart/form-data; boundary=" + boundary;
request.data = getMultiPartRequestData(boundary, 'drawing', 'mypic.jpg', ba);
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(request);
}
private static function getMultiPartRequestData(boundary:String,
resourceName:String,
filename:String,
bytes:ByteArray):ByteArray {
//Alert.show("haha");
var lf:String = "\r\n";
var part1:String = '--' + boundary + lf +
'Content-Disposition: form-data; name="Filename"' + lf + lf +
'{0}' + lf +
'--' + boundary + lf ;
part1 += 'Content-Disposition: form-data; name="commit"' + lf + lf +
'Create' + lf +
'--' + boundary + lf +
'Content-Disposition: form-data; name="{1}[pic] ";' +
'filename="{0}"' + lf +
'Content-Type: application/octet-stream' + lf + lf
var part2:String = '--' + boundary + lf +
'Content-Disposition: form-data; name="Upload"' + lf + lf +
'Submit Query' + lf +
'--' + boundary + '--'
var result:ByteArray = new ByteArray();
// Filling in the parameters as per comment above
result.writeMultiByte(StringUtil.substitute(part1,
filename,
resourceName), "ascii");
result.writeBytes(bytes,0,bytes.length);
result.writeMultiByte(part2, "ascii");
return result;
}
答案在前面的相关问题的答案中。我刚才在那个答案的复制粘贴编辑中错过了它,或者说是把它解开了 需要更改的代码如下:
'Content-Disposition: form-data; name="{1}[pic] ";' +
'filename="{0}"' + lf +
'Content-Type: application/octet-stream' + lf + lf
需要将其更改为:
'Content-Disposition: form-data; name="{1}[pic]"; ' + // space moved here
'filename="{0}"' + lf +
'Content-Type: application/octet-stream' + lf + lf
当您将分号后的空格移动到时,它会起作用