1

我有位图数据。我想使用 URLLoader 将它上传到服务器。我尝试了很多方法,但没有结果。这是我当前在 ActionScript 3 中的代码:

import flash.net.URLLoader;
import flash.net.URLRequest;
import mx.graphics.codec.JPEGEncoder;
...
var jpg:JPEGEncoder = new JPEGEncoder();
var myBytes:ByteArray = jpg.encode(bitmapData);
var uploader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("uploadFile.php");
request.contentType = "application/octet-stream";
request.data = myBytes;
uploader.load(request);

我取一个对象 bitmapData 并将其编码为 jpg。之后,我尝试将 jpg 字节发送到服务器上的文件“uploadFile.php”。但既没有错误,也没有积极的结果。我将不胜感激任何建议/建议。

4

2 回答 2

5

这是我之前用于此的 AS3 代码 - 这会在请求正文中使用二进制数据发出 POST 请求:

var url_request:URLRequest = new URLRequest();
url_request.url = "http://server.com/upload.php";
url_request.contentType = "binary/octet-stream";
url_request.method = URLRequestMethod.POST;
url_request.data = myByteArray;
url_request.requestHeaders.push(
 new URLRequestHeader('Cache-Control', 'no-cache'));

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
// attach complete/error listeners
loader.load(url_request);

我注意到您没有将 .dataFormat 设置为 BINARY 或将 .method 设置为 POST。

请注意,这可能是您遇到的安全问题。我见过这样的代码必须执行以响应用户操作(如按钮单击)的情况。

您还应该检查服务器日志以查看请求是否正在发送到服务器。请注意,如果没有完全限定的 url(以 http:// 开头),则假定服务器从与 SWF 文件相同的位置提供您的 PHP 文件。

于 2012-01-13T20:12:01.327 回答
0

您对图像的编码会破坏它,因为 jpg 数据包含非 ascii 字符。
将您的 contentType 类型更改为“image/jpeg”应该可以修复它,但是此语句未经测试。

当我将 JPG 发送到服务器时,我总是先对其进行 base64 编码,然后在服务器端对其进行解码。

import mx.utils.Base64Encoder;

var b64:Base64Encoder = new Base64Encoder()
b64.encodeBytes( myBytes )
var encodedb64.toString();

request.data = b64.toString();
于 2012-01-14T00:16:33.047 回答