好的,这是独家新闻:
ASP.NET 应用程序。
我正在使用插件 - jquery.exif.js
以及插件 - jQuery-File-Upload
当我将文件加载到 jQueryFileUploader 中时,我需要在发送此文件进行上传之前获取其 exif 数据。
jQueryFileUpload 将图像渲染到画布中,然后我将其转换为图像,以便通过插件获取它的 exif 数据:
$('.my-img').live('click', function () {
var canvas = document.getElementById($(this).attr('id'));
var img = new Image();
img.src = canvas.toDataURL();
$(img).exifLoad(function () {
alert($(img).exifPretty());
});
});
图片网址如下所示:
'数据:图像/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAA7CAYAAADsIg00AAAgAElEQVR....'
当插件运行此方法时:
function sendRequest(strURL, fncCallback, fncError, aRange, bAcceptRanges, iFileSize) {
var oHTTP = createRequest();
if (oHTTP) {
var iDataOffset = 0;
if (aRange && !bAcceptRanges) {
iDataOffset = aRange[0];
}
var iDataLen = 0;
if (aRange) {
iDataLen = aRange[1] - aRange[0] + 1;
}
if (fncCallback) {
if (typeof (oHTTP.onload) != "undefined") {
oHTTP.onload = function () {
if (oHTTP.status == "200" || oHTTP.status == "206" || oHTTP.status == "0") {
this.binaryResponse = new BinaryFile(this.responseText, iDataOffset, iDataLen);
this.fileSize = iFileSize || this.getResponseHeader("Content-Length");
fncCallback(this);
} else {
if (fncError) fncError();
}
oHTTP = null;
};
} else {
oHTTP.onreadystatechange = function () {
if (oHTTP.readyState == 4) {
if (oHTTP.status == "200" || oHTTP.status == "206" || oHTTP.status == "0") {
this.binaryResponse = new BinaryFile(oHTTP.responseBody, iDataOffset, iDataLen);
this.fileSize = iFileSize || this.getResponseHeader("Content-Length");
fncCallback(this);
} else {
if (fncError) fncError();
}
oHTTP = null;
}
};
}
}
oHTTP.open("GET", strURL, true);
if (oHTTP.overrideMimeType) oHTTP.overrideMimeType('text/plain; charset=x-user-defined');
if (aRange && bAcceptRanges) {
oHTTP.setRequestHeader("Range", "bytes=" + aRange[0] + "-" + aRange[1]);
}
oHTTP.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 1970 00:00:00 GMT");
oHTTP.send(null);
} else {
if (fncError) fncError();
}
}
GET 在我的控制台中失败并出现以下错误:
'XMLHttpRequest 无法加载数据:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAA7CAYAAADsIg00AAAgAElEQ…OqEqrkq7RcS3YLfHz3I+/BUMHzeC0Ir2HtuqJC4jFO9/8Bv2hF1W9nFmYAAAAAASUVORK5CYII=。Access-Control-Allow-Origin 不允许来源http://mysite.com 。
Chrome 开发工具的网络选项卡显示了这一点。
我的 Global.asax 中也有这个:
private void EnableCrossDomainAjaxCall()
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("_CACHE-Control", "no-_CACHE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
一般来说,Global.asax 中的代码一直为我解决了访问控制来源问题。但这一次有些不同。
总是有这样的情况,我把它弄得太复杂了。
项目步骤:
- 用户选择图像 - 获取 exif 数据
- 通过表单提交将图像发送到处理程序,以上传到服务器,并带有一些与 exif 相关的所需参数
我感谢任何和所有的帮助!非常感谢!:)
戴夫