将文件从actionscript发送到servlet

我不知道在Flash或Actionscript中编程。 其实我是Java EE开发人员。

在Flash文件中我有这个方法:

private function recordComplete(e:Event):void { fileReference.save(recorder.output, "recording.wav"); } 

此方法会将录制的声音保存到我们将指定的文件夹中的“recording.wav”。

我想要做的是通过将录制的声音发送到Java Servlet来将保存更改为磁盘。

我找到了这段代码,但我不知道如何在HTTP请求中发送的params中插入recorder.output:

 var uploadRequest:URLRequest = new URLRequest("http://127.0.0.1:8080/uploading/upservlet"); uploadRequest.method = URLRequestMethod.POST; uploadRequest.contentType = "multipart/form-data"; uploadRequest.data = myByteArray; var uploader:URLLoader = new URLLoader; uploader.addEventListener(ProgressEvent.PROGRESS, onUploadProgress); uploader.addEventListener(Event.COMPLETE, onUploadComplete); uploader.dataFormat = URLLoaderDataFormat.BINARY; uploader.load(uploadRequest); 

请帮忙。

默认情况下,flash无法使用参数创建multipart请求,您必须手动构建它。 这是我在我的项目中使用的简单实用方法:

 private static const BOUNDARY:String = "boundary"; /** * Create multipart request for URLLoader * NOTE: Don't forget to set the URLLoader.dataFormat = URLLoaderDataFormat.BINARY; * @param url upload url * @param bytes bytes to upload */ public static function createMultiPartRequest(url:String, bytes:ByteArray, fileProp:String="file1", fileName:String="file1.png", params:Object=null):URLRequest { var request:URLRequest = new URLRequest(url); var header1:String = "\r\n--" + BOUNDARY + "\r\n" + "Content-Disposition: form-data; name=\""+fileProp+"\"; filename=\""+fileName+"\"\r\n" + "Content-Type: image/png\r\n" + "\r\n"; var headerBytes1:ByteArray = new ByteArray(); headerBytes1.writeMultiByte(header1, "ascii"); var postData:ByteArray = new ByteArray(); postData.writeBytes(headerBytes1, 0, headerBytes1.length); if(bytes) postData.writeBytes(bytes, 0, bytes.length); if (!params) params = {}; if (!params.Upload) params.Upload = "Submit Query"; for (var prop:String in params) { var header:String = "--" + BOUNDARY + "\r\n" + "Content-Disposition: form-data; name=\""+prop+"\"\r\n" + "\r\n" + params[prop]+"\r\n" + "--" + BOUNDARY + "--"; var headerBytes:ByteArray = new ByteArray(); headerBytes.writeMultiByte(header, "ascii"); postData.writeBytes(headerBytes, 0, headerBytes.length); } request.data = postData; request.method = URLRequestMethod.POST; request.contentType = "multipart/form-data; boundary=" + BOUNDARY; return request; } 

所以你应该用这样的方式修改你的代码:

  var uploadRequest:URLRequest = createMultiPartRequest("http://127.0.0.1:8080/uploading/upservlet", myByteArray, "file1", recorder.output, {param1:value1}); var uploader:URLLoader = new URLLoader; uploader.addEventListener(ProgressEvent.PROGRESS, onUploadProgress); uploader.addEventListener(Event.COMPLETE, onUploadComplete); uploader.dataFormat = URLLoaderDataFormat.BINARY; uploader.load(uploadRequest);