Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用浏览器将通过http发送的base64编码数据保存为二进制_Javascript_Http_Rest_Browser_Base64 - Fatal编程技术网

Javascript 使用浏览器将通过http发送的base64编码数据保存为二进制

Javascript 使用浏览器将通过http发送的base64编码数据保存为二进制,javascript,http,rest,browser,base64,Javascript,Http,Rest,Browser,Base64,我正在编写一个REST服务,它允许接收二进制文件资源 我正在使用RESTEXPRESS,通过HTTP将二进制数据作为编码的base64字符串发送 我有一个标题组合,允许文件作为附件接收,但浏览器不会将base64解码回二进制 我的目标可能实现吗?通过http发送任意二进制文件格式,并让浏览器自动将base64解码为二进制并保存文件。或者让浏览器触发与文件扩展名关联的应用程序?我是否可以透明地执行此操作,还是必须使用javascript 下面列出了显示我使用的标题的代码 public String

我正在编写一个REST服务,它允许接收二进制文件资源

我正在使用RESTEXPRESS,通过HTTP将二进制数据作为编码的base64字符串发送

我有一个标题组合,允许文件作为附件接收,但浏览器不会将base64解码回二进制

我的目标可能实现吗?通过http发送任意二进制文件格式,并让浏览器自动将base64解码为二进制并保存文件。或者让浏览器触发与文件扩展名关联的应用程序?我是否可以透明地执行此操作,还是必须使用javascript

下面列出了显示我使用的标题的代码

public String read(Request request, Response response) throws IOException
    {
        response.setIsSerialized(false);

        response.setContentType("application/arbitraryBinaryFileFormat");

        response.addHeader("Content-Transfer-Encoding", "Base64");

        response.addHeader("Content-Encoding", "Base64");

        response.addHeader("Content-Disposition","attachment; filename=r.arbitraryBinaryFileFormat");

        String result = encodeFileToBase64Binary("/Users/xxx/Downloads/r.arbitraryBinaryFileFormat");
        response.setBody(result);
        return result;
    }

Base64
不是有效的HTTP
内容编码值。请参阅IANA上的

内容传输编码
是一个MIME头,它根本不与HTTP一起使用(请参阅)

简而言之,HTTP没有base64的概念,因此无法强制HTTP客户端自动解码base64编码的数据。您应该以原始二进制格式发送文件数据,而不是将其编码为base64。例如,您可以将
字节[]
数组而不是
字符串
传递给
response.setBody()

对于基于文件名调用应用程序,使用
内容配置:附件;filename=“…”
header是正确的解决方案。您应该将
内容类型
设置为适合文件扩展名的真实合法值,或者改用
应用程序/octet流