【发布时间】:2013-05-12 21:02:24
【问题描述】:
简而言之,我想将图像的二进制数据发送到我的处理程序,该处理程序将作为字节数组保存在数据库中。在我的 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 转换是否包含有关其数据类型的元数据?
【问题讨论】:
-
感谢您的回复,斯图尔特。我的问题是我最初的“二进制字符串”没有表示为 1 和 0,就像 sn-p 上面的那个,这显然不是二进制的,我认为。为什么
readAsBinaryString将其返回为that?那是我不熟悉的另一种二进制形式吗? -
对我来说这看起来像
Assembly。这本身就很奇怪。 -
是的,该字符串是正常的...如果您将字符串传递给处理程序,则应将其编码为 base64 并在处理程序中将数据解码回来... 1 和 0 用于组装......传递这样的数据效率低下......
-
很公平。如果我将它作为 base64 发送并解码,然后存储为字节数组,最终结果是否会包含数据类型?这样当我以后从DB中检索数据时,它就会知道是png,gif等?
标签: c# javascript asp.net