Как загрузить Объект BitmapData прямо на мой сервер?

Использовать события указателя: нет

Свойство CSS указателя-события устанавливает, при каких обстоятельствах (если они есть) конкретный графический элемент может стать целью событий указателя.

blockquote>
.button2 {
    pointer-events: none;   
}

Разветвленный пример: https://stackblitz.com/edit/angular-custom-button-ahemot

5
задан Abs 20 April 2009 в 11:45
поделиться

6 ответов

Это мне очень помогло: http: // kitchen .braitsch.io / upload-bitmapdata-snapshot-to-server-in-as3 /

Вам необходимо изменить URLRequestWrapper для вставки имен полей и имен файлов, где это необходимо. Вот что я сделал:

bytes = 'Content-Disposition: form-data; name="' + $fieldName + '"; filename="';

Он максимально форматирует заголовки, чтобы сервер мог понимать это как загрузку файла.

Кстати, если у вас есть BitmapData, вам может понадобиться кодировать его в JPEG или PNG. первый.

С уважением, Артем

4
ответ дан 14 December 2019 в 13:47
поделиться

Во всяком случае, я действительно не понимаю проблему вопроса: Если вопрос заключается в том, как отправить имя файла и расширение (тип изображения) из флэш-памяти вместе с byteArray данных изображения, вам следует использовать объект URLVariables.

Этот объект также может отправлять строку запроса в виде байта вместо текст.

var request:URLRequest = new URLRequest();
request.url = "your_server_page_for_example.php";
request.method = URLRequestMethod.POST;

var variables:URLVariables = new URLVariables();
variables.name = "imgName";
variables.type = ".jpg";
variables.image = myByteArray;

request.data = variables;
0
ответ дан 14 December 2019 в 13:47
поделиться

You can send your filename data and any other data you want along with the URLRequest:

var params:URLVariables = new URLVariables();
params.id = ride.id;
params.filename = ride.map_image;
params.path = 'maps/';
var req:URLRequest = new URLRequest( ModelLocator.SERVER_URL + "/php/uploadpic.php");
req.method = URLRequestMethod.GET;
req.data = params;
fileRef.upload(req);

on the server side in php you access the extra variables as: $_REQUEST['path'] and $_REQUEST['filename'] etc

2
ответ дан 14 December 2019 в 13:47
поделиться

I haven't used the imageshack API, but you may want to try using adobe's JPGEncoder class - here's a quick example that passes a username and the JPG's byte array, it's really quite simple.

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

Note that the variables are passed as part of the query string. You can't use URLVariables, as several people have suggested, as the URLVariables would be stored in the request's data property, which we are already using to pass the byteArray.

0
ответ дан 14 December 2019 в 13:47
поделиться

Я не использовал API-интерфейс imageshack, но раньше отправлял BitmapData на сервер.

Вы необходимо создать URLRequest и добавить bitmapData в качестве byteArray, поэтому код, я думаю, будет выглядеть примерно так:

var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");//this says the data your sending is binary, not text
var uploadRequest:URLRequest = new URLRequest('yourImageShackUploadURL.php');
uploadRequest.requestHeaders.push (header);
uploadRequest.method = URLRequestMethod.POST;
uploadRequest.data = yourBitmapData.getPixels(yourBitmapData.rect);

sendToURL( uploadRequest);

Вам может потребоваться следующий импорт:

import flash.net.* // for sendToURL and other net stuff
import flash.geom.Rectangle;
import flash.display.BitmapData;

Вы получаете ByteArray из вашего bitmapData с использованием BitmapData's getPixels () метод. Ему нужен экземпляр Rectangle, чтобы узнать положение и размеры, которые вам нужны, но если вам нужен ByteArray для всех BitmapData, а не только для вашей части, вы можете использовать свойство rect BitmapData. Вы создаете заголовок с помощью класса URLRequestHeader и помещаете его в requestHeaders вашего URLRequest. Вы указываете, что ваш метод является post, используя свойство method.

Это должно быть так. Я не знаю никаких других специфичных для API вещей, поэтому надеюсь, что это поможет.

Удачи!

0
ответ дан 14 December 2019 в 13:47
поделиться

Вы можете использовать URLVariables, просто base64-encode bytearray, поэтому это не двоичные данные:

import mx.utils.Base64Encoder;
// ...
var urlRequest:URLRequest = new URLRequest("/whatever");
urlRequest.method = URLRequestMethod.POST;
var urlVariables:URLVariables = new URLVariables();
var base64Encoder:Base64Encoder = new Base64Encoder();
base64Encoder.encodeBytes(byteArray);
urlVariables.something_base64 = base64Encoder.toString();
urlRequest.data = urlVariables;
navigateToURL(urlRequest, "_blank");

затем на стороне сервера base64decode '' поле post, то есть:

php:

base64_decode($_POST['something_base64'])

rails :

require 'base64';
# ...
Base64.decode64(params[:something_base64])
0
ответ дан 14 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: