1

我有以下两种将图像上传到远程 servlet 的方法。出于某种原因,arraybuffer 的第二个参数没有写入发布请求,我试图弄清楚为什么会发生这种情况。有人可以帮助我吗?

setupBinaryMessage = function(metadata) {

    log(metadata);
    var msglen = metadata.length;
    var localcanvas =document.getElementById("image");
    var fullBuffer;
    var myArray;
    if(localcanvas){
        var localcontext = localcanvas.getContext('2d');
    //FOLLOWING 2 LINE OF CODE CONVERTS THE IMAGEDATA TO BINARY
        var imagedata = localcontext.getImageData(0, 0, localcanvas.width, localcanvas.height);
        var canvaspixelarray = imagedata.data;              
        var canvaspixellen = canvaspixelarray.length;               
        var msghead= msglen+"";
        var fbuflen = msglen +canvaspixellen+msghead.length;
        myArray = new ArrayBuffer(fbuflen);
        fullBuffer = new Uint8Array(myArray);
        for (var i=0; i< msghead.length; i++) {
            fullBuffer[i] = msghead.charCodeAt(i);
        }
        for (var i=msglen+msghead.length;i<fbuflen;i++) {
            fullBuffer[i] = canvaspixelarray[count];
            count++;
        };
        return  myArray;        
    } else 
        return null;

};

upladlImageWithPost= function() {
var message =JSON.stringify(this.data); 
var fullBuffer = this.setupBinaryMessage(message);
var formdata = {command : "post", imagedata : fullBuffer,};
alert(jQuery.isPlainObject( formdata ));
var imgPostRequest = $.post( "http://localhost:8080/RestClient/RestClientPOST",fullBuffer, function(response) {     
    response = response.trim();
    console.log(response);
    if(response == "SERVER_READY"){
        alert(response);
        try {

        }catch (error) {
            alert("Web Socket Error "+error.message);
        }
    } else {
        alert("SERVER ERROR");
    }
}.bind(this))
4

1 回答 1

0

好吧,在 GURU 的一些帮助之后,我发现了这个问题。显然 ARRAYBUFFER 已过时,真正的解决方案是按原样发布 unisinged 缓冲区。但即便如此,我也需要将 AJAX 响应类型设置为 ARRAYBUFFER,然后不使用 JQuery $.post,而是使用原始的纯 XHTTPRequest。

资源

于 2013-11-27T20:25:47.660 回答