2009-02-28 12 views

Trả lời

5

đó là một chút khó khăn: Bạn có thể làm điều đó một trong hai cách:

Arthem posted này trong một chủ đề:

Đây là giúp đỡ rất nhiều với tôi: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/

Bạn cần sửa đổi URLRequestWrapper để chèn trường tên và tên tệp nếu cần. Đây là những gì tôi đã thực hiện:

bytes = 'Nội dung-Bố trí: biểu mẫu dữ liệu; name = "'+ $ fieldName +'"; filename = " ';

Nó định dạng hầu hết các tiêu đề để máy chủ có thể hiểu nó như là một tải lên tập tin

Bằng cách này, nếu bạn có một BitmapData bạn có thể cần phải mã hóa nó. để JPEG hoặc PNG đầu tiên

Và tôi thường sử dụng giải pháp này:.

tôi đã không sử dụng API imageshack, nhưng bạn có thể muốn thử sử dụng ado là lớp JPGEncoder - đây là ví dụ nhanh để chuyển tên người dùng và mảng byte của JPG, nó thực sự khá đơn giản.

private function savePicToServer(bmpData:BitmapData):void 
{ 
    var jpgEncoder:JPGEncoder = new JPGEncoder(85); 
    var jpgStream:ByteArray = jpgEncoder.encode(bmpData); 

    var loader:URLLoader = new URLLoader(); 
     configureListeners(loader); 

    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 
    var request:URLRequest = new URLRequest(ModelLocator.BASE_URL + ModelLocator.UPLOAD_URL + "?user=" + ModelLocator.getInstance().username); 
    request.requestHeaders.push(header); 
    request.method = URLRequestMethod.POST; 
    request.data = jpgStream; 
    loader.load(request); 
} 

Lưu ý rằng các biến được chuyển như một phần của chuỗi truy vấn. Bạn không thể sử dụng các biến URL, như một số người đã gợi ý, vì các biến URL sẽ được lưu trữ trong thuộc tính dữ liệu của yêu cầu, mà chúng ta đã sử dụng để truyền byteArray.

0

Bạn có thể sử dụng HTTPService để gửi dữ liệu. Here's giới thiệu sắp xếp hướng dẫn.

+0

Cảm ơn! ... Tôi chưa từng sử dụng Flex trước đây. Tôi sẽ thử. –

0

Nếu bạn không sử dụng flex, hãy thử URLLoader & & URLyêu cầu, để chuyển dữ liệu của bạn dưới dạng biến POST.

+0

Tôi đã làm. Vấn đề là: Tôi muốn đăng một số dữ liệu biểu mẫu bên cạnh. –

2

Tôi muốn gửi biểu mẫu mã ủy quyền được mã hóa Flash tới PHP cùng với hình ảnh JPG. Nó không phù hợp để đăng bài này trong các biến nhận được và vì vậy tôi đã nhận được xung quanh nó theo cách này. Hầu hết các mã là thu thập thực tế của một ảnh chụp màn hình sân khấu, nhưng chỉ một khu vực cụ thể của nó. Phần có liên quan đến ở đây là việc sử dụng writeMultiByte để gắn vào mật khẩu được mã hóa vào cuối thông tin hình ảnh jpb. Sau đó tôi gửi chiều dài của mật khẩu này bằng cách sử dụng chuỗi url biến get để PHP biết hiển thị nhiều để cắt bỏ phần cuối.

var stage_snapshot:BitmapData = new BitmapData(600, 120); 
var myRectangle:Rectangle = new Rectangle(0, 0, 600, 120); 
var myMatrix:Matrix = new Matrix(); 
var translateMatrix:Matrix = new Matrix(); 
translateMatrix.translate(-101, -33); 
myMatrix.concat(translateMatrix); 
stage_snapshot.draw(stage,myMatrix,null,null,myRectangle); 
trace ("creating JPGEncoder"); 
// Setup the JPGEncoder, run the algorithm on the BitmapData, and retrieve the ByteArray 
var encoded_jpg:JPGEncoder = new JPGEncoder(100); 
var jpg_binary:ByteArray = new ByteArray(); 
jpg_binary = encoded_jpg.encode(stage_snapshot); 
var pw = cryptoSalt.encrypt("mysecretpassword"); 
**var pwLength = pw.length; 
jpg_binary.writeMultiByte(pw,"us-ascii");** 
trace ("stage snapshot taken"); 
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream"); 
var request:URLRequest = new URLRequest("savejpg.php?length1=" + pwLength); 
request.requestHeaders.push(header); 
request.method = URLRequestMethod.POST; 
request.data = jpg_binary; 
var loader:URLLoader = new URLLoader(); 
trace ("sending pic to php"); 
loader.load(request); 
loader.addEventListener(Event.COMPLETE,finishSave); 

Các nhận PHP:

$pwlength = $_GET['length1']; 
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"]; 
$pw = substr($jpg, - $pwlength); 
$jpg = substr($jpg,0,strlen($jpg) - $pwlength); 
$filename = 'uploads/test.jpg'; 
file_put_contents($filename, $jpg); 
file_put_contents("uploads/pw.txt",$pw); 
0

Bạn có thể sử dụng AMFPHP hoặc Zend AMF, tôi vừa hoàn thành một dự án như thế này, sản phẩm của tôi cho phép người dùng thay đổi một màu sắc sản phẩm và sau đó sản lượng ByteArray dữ liệu và đối tượng AS3 khác trực tiếp vào PHP và chèn vào MySQL, bạn có thể see my projectAMFPHP

tất cả PNG hình ảnh trong suốt được tạo bởi Flash và gửi tới AMFPHP, PHP sau đó tạo tệp PNG trên máy chủ.