我正在尝试执行以下操作:
主要问题在底部。
通过FileReader读取二进制文件并发送到服务器:
我正在使用角度,但我不相信它是相关的,所以除非有人会问我,否则我将删除样板代码,除了调用服务器。由于不推荐使用FileReader readAsBinaryString,我正在使用readAsArrayBuffer:
$resource(myurl, {},
{
post: {
method: 'POST',
params: {},
isArray: false,
headers:{'Content-Type':'application/octet-stream'}}
});
var reader = new FileReader();
reader.onload = function() {
resource.post({}, reader.result);
};
当此代码运行时,我在网络选项卡中看到数据似乎正确传递。 post数据包含一个字节数组,例如长度为400字节。
读取服务器中的文件
我正在使用此代码读取服务器
@POST
@Path(myPath)
@Consumes({"application/zip"})
@Produces({MediaType.APPLICATION_JSON})
public Response myRest(@QueryParam("file-name") String fileName, InputStream file) {
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
while ((bytesRead = file.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
byte[] data = output.toByteArray();
return Response.ok().build();
}
当我调试时,我看到的结果与我发送的字节数组完全不同。例如,虽然我在浏览器网络中看到一个400字节长的数组,但在服务器中我看到10字节长度的数组。
谢谢!