使用 javascript 将文件作为二进制流发布到服务器
POST a file as a binary stream to server using javascript
我有一个疑问,我尝试过在网上搜索,但我没有找到我想要的答案。从本地系统,我使用 html 输入类型=文件属性上传了一个文件。现在我想使用 JavaScript 将此文件制作为二进制流,然后将此流的 POST 发送到服务器。有没有人有一个想法或示例代码让我了解它是如何工作的?
例如:我有
<input type="file" id="myFile">
<button onclick="myFunction()">Upload</button>
<script>
function myFunction()
{
var x = document.getElementById("myFile");
//convert x to a IOstream*
//do a HTTP POST request to server and also write the file as stream like request.getstream
}
</script>
仅使用 JS 可以做到这一点吗?目前,我只专注于更新图像等媒体文件。它必须作为IOstream上传,因为这是服务器接受的唯一格式。此外,它必须与野生动物园一起使用!!提前感谢!
FileReader 方法支持
FileReader.readAsBinaryString(
) 已弃用。不要使用它!它不再在 W3C 文件 API 工作草案中:
void abort();
void readAsArrayBuffer(Blob blob);
void readAsText(Blob blob, optional DOMString encoding);
void readAsDataURL(Blob blob);
注意:请注意,File
是一种扩展Blob
结构。
Mozilla仍然实现readAsBinaryString()
并在MDN FileApi文档中对其进行描述:
void abort();
void readAsArrayBuffer(in Blob blob); Requires Gecko 7.0
void readAsBinaryString(in Blob blob);
void readAsDataURL(in Blob file);
void readAsText(in Blob blob, [optional] in DOMString encoding);
弃用readAsBinaryString()
背后的原因如下:Javascript字符串的标准是DOMString
只接受UTF-8字符,而不是随机二进制数据。所以不要使用 readAsBinaryString(),这根本不安全且不符合 ECMAScript。
我们知道Javascript字符串不应该存储二进制数据,但Mozilla在某种程度上可以。在我看来,这很危险。 Blob
和typed arrays
(ArrayBuffer
和尚未实现但不是必需的StringView
)的发明目的只有一个:允许使用纯二进制数据,没有UTF-8字符串限制。
XMLHttpRequest upload 支持
XMLHttpRequest.send() 具有以下调用选项:
void send();
void send(ArrayBuffer data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
XMLHttpRequest.sendAsBinary() 具有以下调用选项:
void sendAsBinary( in DOMString body );
sendAsBinary() 不是标准,Chrome 可能不支持。
解决 方案
因此,您有几种选择:
send()
FileReader.readAsArrayBuffer ( fileObject )
的FileReader.result
.操作起来更复杂(你必须为它制作一个单独的 send(),但这是推荐的方法。send()
FileReader.readAsDataURL( fileObject )
的FileReader.result
.它会产生无用的开销和压缩延迟,需要在服务器端进行解压缩步骤,但在 Javascript 中很容易作为字符串进行操作。非标准,
sendAsBinary()
FileReader.readAsBinaryString( fileObject )
FileReader.result
MDN指出:
发送二进制内容(如文件上传)的最佳方式是使用 ArrayBuffers 或 Blobs in conconcton with the send() 方法。然而 如果要发送可字符串的原始数据,请使用 sendAsBinary() 方法,或 StringView(非本机)类型化数组 超类。
- 使用JSP从服务器检索和显示图像
- Node.js服务器和浏览器之间共享二进制缓冲区
- 将二进制数据发送到服务器
- 将通过 AJAX 上传的二进制数据保存在 PHP 服务器上
- 使用jQuery从服务器下载二进制文件
- 在将图像作为原始图像二进制数据(png或jpeg)上传到服务器之前,裁剪或调整图像大小
- Javascript 二进制文件到服务器
- AngularJS从base64制作二进制数据图像,并作为图像文件发送到服务器
- 为什么我可以使用 FileSystemObjects 来读取和写入客户端二进制文件,而不能用于读取和发送到服务器
- 使用 javascript 将文件作为二进制流发布到服务器
- 可以使用javascript或phonegap以二进制模式从远程服务器读取图像
- 将JavaScript和CSS作为二进制文件从服务器传输到客户端的可行性
- 从phantomjs Web服务器返回二进制结果
- AngularJS:把二进制数据从ArrayBuffer放到服务器
- 如何通过将视频blob转换为二进制数据包发送到node.js服务器
- 如何从Node.js套接字发送二进制数据.IO服务器到浏览器客户端
- 如何将二进制数据作为文件上传发送到服务器
- 读取二进制文件从服务器和赞扬它在javascript
- 保存文件上传到服务器作为二进制字符串从javascript到文件使用c#
- 在web浏览器中以流方式从HTTP服务器接收二进制数据