2013-12-09 81 views
0

我在嘗試使用Uploadify設置一個基本示例,我的代碼適用於除Chrome以外的所有瀏覽器。Chrome中的Uploadify IO錯誤

基本上,我想要做的就是讓用戶選擇一個圖像嵌入到頁面中。用戶選擇一個文件,然後在選擇文件時,通過Uploadify將文件發送到我的C#處理程序,該處理程序將圖像轉換爲base-64編碼的字符串,然後將其發送回目標imgsrc

這裏是我的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 monUploadError函數被擊中,錯誤變量如下:

  1. 文件:[文件對象]
  2. 的errorCode:-220
  3. ERRORMSG:錯誤#2038
  4. Errorstring,則:IO錯誤

我使用的是Uploadify的最新版本(剛剛從Uploadify.com昨晚下載,v。3.2.1)。

有沒有人看過這個或知道我在做什麼錯了?

UPDATE:

做了一些谷歌搜索後,似乎有些用戶已經走了Chrome瀏覽器禁用了Flash的路線,我可以驗證這工作,但我不喜歡這樣的解決方案。如果你去到Chrome插件頁面有安裝了2個版本:

Chrome plugins page

如果我禁用列表中的第一個,我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); 
     } 
     }); 
    } 
}); 
+0

你使用這個agains localhost? Chrome在某些操作方面對localhost有限制,可能上傳就是其中之一?如果是這樣,一旦在託管部署上運行此問題,問題可能會消失。 –

+1

我現在正在使用localhost。讓我把它放在一個IIS站點上,並嘗試一下。感謝您的想法! – lhan

+0

不是。仍然不起作用 - 同樣的錯誤。除非Chrome對本地網站以及本地主機有限制? (我現在通過機器名稱而不是本地主機訪問我的網站) – lhan

回答

1

現在該解決方案將是使用Modernizr的檢測,如果HTML 5文件API可用(特別是FileReader)。如果可用,我將使用FileReader將圖像轉換爲基本64編碼字符串,並使用imgsrc屬性中的圖像。

$(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); 
     } 
     }); 
    } 
}); 
+0

我建議您在答案中編寫解決方案(__SOLUTION:__ ...之後的部分),因爲它與Stack Overflow中的Q&A格式看起來更一致。很高興你順利解決了這個問題。 –

+1

良好的通話,我通常會做,但昨天有點匆忙。再次感謝您的幫助。 – lhan