为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的数组缓冲区是空的服务器端?

为什么我的数组缓冲区是空的服务器端?

叮当猫咪 2021-11-11 16:22:39
我在 JavaScript 中有一个方法可以将二进制文件读取到 ArrayBuffer 并将其发送到 Jersey POST 方法:function readAndSendBytes() {    var file = document.getElementById("entityFileField").files[0],        reader = new FileReader();    var entityBytes = reader.readAsArrayBuffer(file);    reader.onloadend = function () {        alert(reader.result);    }    var xhr = new XMLHttpRequest();    var url = "/api/upload/e2j";    xhr.open("POST", url, true);    xhr.setRequestHeader("Content-type", "application/octet-stream");    xhr.responseType = "json";    xhr.onload = function (e) {        var response = xhr.response;        alert(response);    }    xhr.send(reader.result);}球衣:@Path("/upload")public class ParserHandler {    @POST    @Path("/e2j")    @Consumes(MediaType.APPLICATION_OCTET_STREAM)    @Produces(MediaType.APPLICATION_JSON)    public String entityToJsonTwoElectricBoogaloo(byte[] entityPayload) {        System.out.println(entityPayload.length);}每当我将长度打印到控制台时,长度总是 0,而应该是 439。我做错了什么?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

找到了解决办法!只是将除了文件和 FileReader 的发送和初始化之外的所有内容都移动到 xhr.onload 函数中!


编辑:忘记发布我的解决方案。


function postEntity() {

    var output = document.getElementById("response");

    var file = document.getElementById("entityFileField").files[0];

    var jsonResponse;


    var r = new FileReader();

    r.onloadend = function(e) {

        var data = r.result;


        var xhr = new XMLHttpRequest();

        var url = "/api/upload/entitytojson";

        xhr.open("POST", url, true);

        xhr.setRequestHeader("Content-type", "application/octet-stream");

        xhr.responseType = "json";


        xhr.onload = function (e) {

            if (xhr.response != null) {

                jsonResponse = JSON.stringify(xhr.response);

                output.innerHTML = jsonResponse;

            }

            else {

                alert("Invalid Entity File");

            }

        }


        xhr.send(data);

    }


    r.readAsBinaryString(file);

}


查看完整回答
反对 回复 2021-11-11
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

无需使用文件阅读器,您只需使用 xhr 发送 blob


function sendFile() {

  var file = document.getElementById("entityFileField").files[0];

  var xhr = new XMLHttpRequest();

  var url = "/api/upload/e2j";

  xhr.open("POST", url);

  xhr.setRequestHeader("Content-type", "application/octet-stream");

  xhr.responseType = "json";


  xhr.onload = function (e) {

    var response = xhr.response;

    alert(response);

  }


  xhr.send(file);

}


查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信