将文件从动作脚本发送到 servlet [英] Send file from actionscript to servlet

查看:23
本文介绍了将文件从动作脚本发送到 servlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道在 Flash 或 Actionscript 中编程.实际上,我是一名 Java EE 开发人员.

Ihave no idea about programming in Flash or Actionscript. Actually I am a Java EE Developer.

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

In a flash file I have this method:

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

    }

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

This method will save a recorded sound to "recording.wav" in the folder that we will specify.

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

What I want to do is to change the save to the disk by sending the recorded sound to a Java Servlet.

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

I found this code, but I dont know how to insert the recorder.output in params sent in the HTTP Request:

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 请求,您必须手动构建它.这是我在项目中使用的简单实用方法:

By default flash can't create multipart request with parameters, you have to construct it manually. Here is the simple utility method I used in my projecs:

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 = "
--" + BOUNDARY + "
" + 
        "Content-Disposition: form-data; name=""+fileProp+""; filename=""+fileName+""
" + 
        "Content-Type: image/png
" + "
";
    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 + "
" + "Content-Disposition: form-data; name=""+prop+""
" + "
" + params[prop]+"
" + "--" + 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;
}

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

So you should modify your code in such way:

    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);

这篇关于将文件从动作脚本发送到 servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆