使用javascript将文件作为二进制流发布到服务器
我有一个疑问,我试着在网上搜索,但我没有找到我想要的答案。 在本地系统中,我使用html输入类型=文件属性上传了一个文件。 现在,我想使用javascript将此文件作为二进制流,然后将此流发布到服务器。 有没有人有想法或示例代码让我理解它是如何工作的 例如: 我有使用javascript将文件作为二进制流发布到服务器,javascript,Javascript,我有一个疑问,我试着在网上搜索,但我没有找到我想要的答案。 在本地系统中,我使用html输入类型=文件属性上传了一个文件。 现在,我想使用javascript将此文件作为二进制流,然后将此流发布到服务器。 有没有人有想法或示例代码让我理解它是如何工作的 例如: 我有 上传 函数myFunction() { var x=document.getElementById(“myFile”); //将x转换为IOstream* //对服务器执行HTTP POST请求,并将文件写入类似于request.
上传
函数myFunction()
{
var x=document.getElementById(“myFile”);
//将x转换为IOstream*
//对服务器执行HTTP POST请求,并将文件写入类似于request.getstream的流
}
只有JS才能做到这一点吗?目前我只专注于上传媒体文件,比如图像。
它必须作为IOstream上传,因为这是服务器接受的唯一格式。
此外,它还必须与Safari配合使用!!
提前谢谢 文件读取器方法支持
FileReader.readAsBinaryString(
)不推荐使用。不要用它它不再在
注意:File
是一种扩展的Blob
结构
Mozilla仍然实现了readAsBinaryString()
,并在以下内容中进行了描述:
我认为,readAsBinaryString()
弃用的原因如下:Javascript字符串的标准是DOMString
,它只接受UTF-8字符,不接受随机二进制数据。所以不要使用readAsBinaryString(),这既不安全也不符合ECMAScript
我们知道Javascript字符串不应该存储二进制数据,但Mozilla可以以某种方式存储二进制数据。我认为那很危险Blob
和类型化数组
(ArrayBuffer
和尚未实现但不必要的StringView
)的发明有一个目的:允许使用纯二进制数据,而不受UTF-8字符串限制
XMLHttpRequest上传支持
具有以下调用选项:
void send();
void send(ArrayBuffer data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
void sendAsBinary( in DOMString body );
具有以下调用选项:
void send();
void send(ArrayBuffer data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
void sendAsBinary( in DOMString body );
sendAsBinary()不是标准,Chrome可能不支持它
解决
所以你有几个选择:
send()
FileReader.readAsArrayBuffer(fileObject)的FileReader.result
。操作起来更复杂(您必须为其创建一个单独的send()),但这是推荐的方法send()
FileReader.readAsDataURL(fileObject)的FileReader.result
。它会产生无用的开销和压缩延迟,需要在服务器端执行解压缩步骤,但很容易在Javascript中作为字符串进行操作sendAsBinary()
文件读取器的FileReader.result
文件读取器.readAsBinaryString(fileObject)嗯。。。将您的
放入
和提交()
中?只需使用FormData
即可。如果我只上传媒体文件(因为我将在ipad上使用webapp,并且不可能使用小程序),那么唯一的替代方法就是将其作为源流发布到服务器。在这个场景中,使用javascript最简单的方法是什么?使用safari浏览器时,javascript也会有所帮助
void sendAsBinary( in DOMString body );