- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
简而言之,我想将图像的二进制数据发送到我的处理程序,该处理程序将作为字节数组保存在数据库中。在我的 Javascript 中使用 readAsBinaryString(f)
读取文件输入的值,我将得到如下输出:
GIF89a,úæÿÿÿ2c½3fÌ Smaäµééúþc«T.[ÈéùAtεÚõ[ãXßÆî*[µc³8Ûõüÿfj¥æ§ÈïÛå÷ËØñI}ÓQ×
*\»q£E}Ûÿå§ÓõþÿIÛv¤Þ´Åè«æ ³][us¬çAy×MÞ,a½«ÔóZÝL2äëùQ×(Eq<pË5V¨·ÏIÓ¨»åQßY¥3bØÈ
æ¬z³é<uÓ3£ÎñE¾á÷RÛR¢K®ÎØØìÍAtÓÑÔØrÀ-hݪÑïôõüR|ÎäóÖUËåæçXÔw»^s®ëI}ÛQ}ÔEÛ·Îñ½Óêd»Ì
ÌëöåóôöÖàñE×Cr¿C¤3óúëLÍYÜ3fõûöÑðû Øûÿõw²ñ`ª»ßÀy|Á¿ÃIuÔM×ûñû{¹R4¼ìe¡äl«ç!ÿNETSCA
PE2.0!ÿXMP DataXMP<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpm
eta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02
/06-14:56:27 // etc..
该数据通过 AJAX 发送:
$.ajax({
url: theUrl,
type: 'POST',
data: { Image: image } // image = data above
});
这是一个二进制字符串?当我将此字符串发送到我的处理程序 (IHttpHandler) 时,为了将其存储到字节数组中,如果我将编码设置为 ISO-8859-1,我可能只会获取字节。
public void ProcessRequest (HttpContext aContext)
{
// This works as long as requestValidationMode = "2.0" in web.config
// Is there a way to bypass HttpRequestValidationException just on
// THIS data?
byte[] imageBytes = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(_Context.Request["Image"]);
//...
}
这正常吗?这也会抛出 HttpRequestValidationException(从 .. 检测到潜在危险的 Request.Form 值)。我宁愿不更改 requestValidationMode
,因为它对 XSS 开放,那么如何转义二进制字符串呢? Base64 编码是否涵盖了这一点,如果是,那么在处理程序中从 Base64 进行的转换是否包含有关其数据类型的元数据?
最佳答案
查看您在代码中所做的事情真的很有帮助,这就是我 asked 的原因你展示它。我猜想您的代码如下所示:
var f = $("image").files[0];
var reader = new FileReader();
reader.readAsBinaryString(f);
var image = reader.result;
$.ajax({
url: theUrl,
type: 'POST',
data: { Image: image }
});
现在当你说:
I'll get output like this:
GIF89a,úæÿÿÿ2c½3...
Is my output [...] binary data?
是的,但是您可以阅读它,所以它是文本。二进制数据和文本数据之间的区别有点令人困惑,阅读 this如果您想变得更加困惑。问题的原因是编码,如该文章中所述。
这取决于您如何将它输出到您的页面,但浏览器可能会或可能不会对其接收的数据应用某种编码(Fiddler 检查可以告诉您更多关于通过 HTTP 线路发送的内容)和将其显示为或多或少可读的文本。
这不适用于您的 image
变量,其中包含来自 readAsBinaryString()
的实际二进制数据结果,以“原始二进制数据[原文如此]”的形式。哦,松散类型,谁在乎你返回什么。我猜/希望是一个字节数组。您现在需要将其发送到服务器。文件上传最好由 <input type="file" />
处理元素,但有时您需要使用 AJAX 来做一些事情。你can't确实通过 JavaScript 进行真正的文件上传,尽管据我所知浏览器支持 seems to be增加。
所以你需要POST
将文件内容作为发布表单的参数之一。为了使用二进制数据成功实现这一点,您需要对其进行正确编码以提交表单。
首先确保使用 content-type
发出请求的 application/x-www-form-urlencoded
.您可以在 Fiddler 中或通过查阅 manual 来检查这一点.后者根本没有提到任何编码,你必须 figure that out .
现在你需要url-encode二进制数据以便发布它。此函数返回输入字节,解释为 UTF-8,作为可以安全发布的 URL 编码字符串。然后服务器端,你可以更换
System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(_Context.Request["Image"]);
与
System.Text.Encoding.UTF8.GetBytes(_Context.Request["Image"]);
但是为什么文件的内容仍然是那种形式的呢?作为this answer提到,FileReader
还包含一个 readAsDataURL
方法,它允许您使用 reader.result
直接作为POST
变量。
所以,你的代码变成这样:
var f = $("image").files[0];
var reader = new FileReader();
reader.readAsDataURL(f);
var image = reader.result;
$.ajax({
url: theUrl,
type: 'POST',
data: { Image: image }
});
然后在服务器端,你必须从 base 64 解码数据:
byte[] imageBytes = System.Convert.FromBase64String(_Context.Request["Image"]);
它是如何工作的?
关于c# - FileReader.readAsBinaryString 是否返回二进制或基于 ASCII 的字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613360/
这是我的代码: var reader = new FileReader(); reader.onload = function(e) { download(reader.result, "Te
您好,我正在使用 javascript 上的文件 API 制作我的第一个项目,这是一个简单的程序,它将文件作为输入并在 Div 上显示其内部代码。我想知道是否有办法让这段代码在没有事件监听器和事件处理
尝试使用 fileReader.readAsBinaryString 通过 AJAX 将 PNG 文件上传到服务器,精简代码(fileObject 是包含我文件信息的对象); var fileRead
我想将图像以二进制形式保存到用户本地主机以供将来引用,然后在以后从该二进制文件生成一个 dataurl,问题是,它不起作用。 var reader = new FileReader(); reader
我有一个以下格式的文件: utf-8 encoded text block separator binary data block 我使用 JavaScript 的 FileReader 使用 将文件
使用 filereader API通过使用 readAsDataURL 读取文件,可以显示文件的预览。 我想做的是: 用户选择一个文件 显示预览,以便用户获得一些反馈。 如果用户满意,他将数据提交到后
我目前正在关注this tutorial用于从 javascript 将图像上传到 Google Drive。该示例代码运行良好,您可以选择要从硬盘上传的文件。我现在尝试根据我的目的修改它,以便它以标
似乎readAsBinaryString ,JavaScript FileReader 对象的方法,在 IE10 中不受支持。我已按照 this HTML5 Rocks article 中的建议尝试了
本页http://www.html5rocks.com/en/tutorials/file/dndfiles/如果您向下滚动到示例“示例:切片文件。试试吧!”您将看到使用 readAsBinarySt
我正在使用 reader.readAsArrayBuffer() 将文件发送到 node.js,以便我可以将其保存在/public 文件夹中。 reader.readAsArrayBuffer(eve
如果有输入类型文件 和一张图片 如果选择了一个文件,我想从图像中读取 Exif 数据并将其加载到 img 标签中。 var $inputFile = $("#file"); $inputFile.
简而言之,我想将图像的二进制数据发送到我的处理程序,该处理程序将作为字节数组保存在数据库中。在我的 Javascript 中使用 readAsBinaryString(f) 读取文件输入的值,我将得到
完整代码在 https://gist.github.com/992562 . 我正在使用 HTML 文件 API 并通过拖放将文件通过 XHR post 上传到 PHP 脚本。在程序上,一切似乎都正常
文件读取器。 readAsBinaryString()返回 UTF-8 编码的二进制字符串。我如何才能获取作为一系列 Unicode 转义序列 (\uxxxx) 的数据? 最佳答案 FileReade
以下代码适用于 Chrome 浏览器。 $('#file').change(function(e) { var fileReader = new FileReader(), f
如何等到onload事件完成 function(){ var filedata=null; reader.onload=function(e){ filedata=e.target.resul
举个例子,当我使用 FileReader API 从文件中读取 π 字符 (\u03C0) 时,当我使用 FileReader 读取它时,我会将 pi 字符返回给我.readAsText(blob)
有没有办法将 HTML Canvas 的内容读取为二进制数据? 目前我有以下 HTML 来显示输入文件和它下面的 Canvas : Get Image Content Input: Canvas 然后
我正在尝试解析 xls 文件,请参见下面的文件 https://filebin.net/jm37356p8nkzgycm 获取错误 无法在“FileReader”上执行“readAsBinaryStr
在 HTML5 中,引入了 FileReader API。我无法真正理解 readAsBinaryString() 和 readAsDataURL() 之间的区别。我从几个地方阅读了文档,但仍然无法完
我是一名优秀的程序员,十分优秀!