我在嘗試使用Uploadify設置一個基本示例,我的代碼適用於除Chrome以外的所有瀏覽器。Chrome中的Uploadify IO錯誤
基本上,我想要做的就是讓用戶選擇一個圖像嵌入到頁面中。用戶選擇一個文件,然後在選擇文件時,通過Uploadify將文件發送到我的C#處理程序,該處理程序將圖像轉換爲base-64編碼的字符串,然後將其發送回目標img
的src
。
這裏是我的JS:
<link rel="stylesheet" href="Content/Uploadify/uploadify.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="Content/Uploadify/jquery.uploadify.js"></script>
<script type="text/javascript">
$(function() {
$("#fileUpload").uploadify({
'swf': 'Content/Uploadify/uploadify.swf',
'uploader': 'ImageHandler.ashx',
'onUploadSuccess': function (file, data, response) {
$("#theImage").attr("src", data);
},
'onUploadError': function (file, errorCode, errorMsg, errorString) {
alert('The file ' + file.name + ' could not be uploaded: ' + errorString);
}
});
});
</script>
HTML:
<input type="file" id="fileUpload" />
<img id="theImage" height="300" width="300"/>
這是我的處理代碼:
public void ProcessRequest(HttpContext context)
{
if (context.Request.Files.Count > 0)
{
byte[] bytes = null;
using (var binaryReader = new BinaryReader(context.Request.Files[0].InputStream))
{
bytes = binaryReader.ReadBytes(context.Request.Files[0].ContentLength);
var base64 = Convert.ToBase64String(bytes);
var imgSource = "data: " + context.Request.ContentType + ";base64," + base64;
context.Response.ContentType = "text/plain";
context.Response.Write(imgSource);
}
}
context.Response.ContentType = "text/plain";
context.Response.Write("");
}
,你可以看,這是非常簡單的工作在FF,IE瀏覽器(即使是IE 5模擬器瓦特/ IE 11!),Safari瀏覽器,但在Chrome瀏覽器(訴31.0.1650.63 m)onUploadError
函數被擊中,錯誤變量如下:
- 文件:[文件對象]
- 的errorCode:-220
- ERRORMSG:錯誤#2038
- Errorstring,則:IO錯誤
我使用的是Uploadify的最新版本(剛剛從Uploadify.com昨晚下載,v。3.2.1)。
有沒有人看過這個或知道我在做什麼錯了?
UPDATE:
做了一些谷歌搜索後,似乎有些用戶已經走了Chrome瀏覽器禁用了Flash的路線,我可以驗證這工作,但我不喜歡這樣的解決方案。如果你去到Chrome插件頁面有安裝了2個版本:
如果我禁用列表中的第一個,我Uploadify工作正常,但我不希望我的用戶不得不這樣做。
SOLUTION:
由於我使用Uploadify的整個要點是將圖像發送到處理程序,並使用處理器的響應,從而刷新頁面,並且處理器只圖像轉換到一個base64編碼的字符串,我會在可用的情況下使用HTML 5的FileReader
。所以對於Chrome,FF,IE 10 &起來,甚至不會使用Uploadify。這是我的新代碼,跨瀏覽器的工作原理:
$(function() {
if (Modernizr.filereader) {
var $fileUpload = $("#fileUpload");
$fileUpload.on("change", function (e) {
var files = e.target.files;
if (files.length) {
var reader = new FileReader();
reader.onload = function (e) {
$("#theImage").attr("src", reader.result);
}
reader.readAsDataURL(files[0]);
}
});
} else {
// browser doesn't support the HTML 5 file reader api, so fall back to Uploadify:
$("#fileUpload").uploadify({
'swf': 'Content/Uploadify/uploadify.swf',
'uploader': 'ImageHandler.ashx',
'onUploadSuccess': function (file, data, response) {
$("#theImage").attr("src", data);
},
'onUploadError': function (file, errorCode, errorMsg, errorString) {
alert('The file ' + file.name + ' could not be uploaded: ' + errorString);
}
});
}
});
你使用這個agains localhost? Chrome在某些操作方面對localhost有限制,可能上傳就是其中之一?如果是這樣,一旦在託管部署上運行此問題,問題可能會消失。 –
我現在正在使用localhost。讓我把它放在一個IIS站點上,並嘗試一下。感謝您的想法! – lhan
不是。仍然不起作用 - 同樣的錯誤。除非Chrome對本地網站以及本地主機有限制? (我現在通過機器名稱而不是本地主機訪問我的網站) – lhan