2014-11-25 51 views
0

上传之前获取文件的高度宽度我有天冬氨酸:在我的网页表单FileUpload控件。使用Javascript/Asp.net

的OnChange()事件的FileUpload控制,执行JavaScript函数

<asp:FileUpload ID="fUpload" runat="server" Style="visibility: hidden;width:1px" onchange="callme(this)"/> 

JavaScript函数:

function callme(oFile) { 
    document.getElementById('<%=txtFilePath.ClientID%>').value = oFile.value; 
    ReadImage(oFile.value); 
} 

ReadImage功能应该阅读该文件,并告诉高度所选文件的宽度和大小,并在文件不是图像时显示错误消息。

function ReadImage(_file) 
{ 
    var reader = new FileReader(); 
    var image = new Image(); 


    image.src = 'file://' + _file;    
    image.onload = function() { 

      alert('Step 2'); 

      var w = this.width, 
       h = this.height, 
       t = file.type,       
       n = file.name, 
       s = ~ ~(_file.size/1024) + 'KB'; 


      alert('<img src="' + this.src + '"> ' + w + 'x' + h + ' ' + s + ' ' + t + ' ' + n + '<br>'); 
     }; 
     image.onerror= function() 
     { 
      alert('Invalid file type: '+ _file.type); 
     }; 

    } 

的ReadImage()函数应该阅读选择的文件,并上传到服务器之前获得高度,宽度和大小的文件。

如何可以做到这一点?我做错了什么。

+0

什么是'_file'的价值? – TryingToImprove 2014-11-25 09:03:38

+0

用户机器...除权任何本地文件路径: “C:\用户\ amit_shelke \图片\ as.jpg” – 2014-11-25 09:07:46

+0

你确定它是不是'C:/ fakepath/as.jpg'? – TryingToImprove 2014-11-25 09:49:38

回答

0
function callme(oFile) 
{ 
    document.getElementById('<%=txtFilePath.ClientID%>').value = oFile.value; 
    ReadImage(oFile); 
} 

function ReadImage(_file) { 
    var fr = new FileReader; 

    fr.onload = function() { // file is loaded 
     var img = new Image; 

     img.onload = function() { 

      alert('Step 2'); 

      var w = img.width; 
      var h = img.height; 

      alert('<img src="' + fr.result + '"> ' + w + 'x' + h + '<br>'); // is the data URL because called with readAsDataURL 
     }; 
     img.onerror = function() { 
      alert('Invalid file type'); 
     }; 

     img.src = fr.result; // is the data URL because called with readAsDataURL 

    }; 

    fr.readAsDataURL(_file.files[0]); // for using a <input type="file"> 
} 
+0

您的解决方案无法正常工作。谢谢你的尝试。 img.onload()没有触发。 – 2014-11-25 10:23:20

+0

哦,我只是忘了把img.src,现在试试我已经更新了我的代码。 – Vaibhav 2014-11-25 10:26:13

-1

做你尝试没有image.src = '文件://' + _file;

var img = new Image; 

img.onload = function() { 
    alert(img.width); 
    alert(img.height); 
}; 
img.onerror = function() { 
    alert("error"); 
}; 
img.src = oFile.value; 
+0

是的,已经尝试过你的建议,但没有工作。其实警报(img.width)应该给我确切的价值,但事实并非如此。究其原因可能是我,可能需要创建的FileReader类的对象,并把它传递给图片类,那么你的代码可以工作,但我是新来的JavaScript所以找不到我需要写什么确切的代码。 – 2014-11-25 09:54:28

+0

我已经发布了另一个答案,我已经改变了callme和ReadImage函数,它现在应该可以工作。 – Vaibhav 2014-11-25 10:11:38

0

我的问题剩下的部分 -

使用 “上传之前获取文件大小” 这个JavaScript

function checkFile(fieldObj) { 
    var FileName = fieldObj.value; 
    var FileExt = FileName.substr(FileName.lastIndexOf('.') + 1); 
    var FileSize = fieldObj.files[0].size; 
    var FileSizeMB = (FileSize/10485760).toFixed(2); 


    if ((FileExt != "png" && FileExt != "doc" && FileExt != "bmp" && FileExt != "dib" && FileExt != "JPG" && FileExt != "jpeg" && FileExt != "jpe" && FileExt != "jfif" && FileExt != "gif" && FileExt != "tiff" && FileExt != "tif" && FileExt != "tga") || FileSize > 10485760) { 
     var error = "File type : " + FileExt + "\n\n"; 
     error += "Size: " + FileSizeMB + " MB \n\n"; 
     error += "Please make sure your file is in pdf or doc format and less than 10 MB.\n\n"; 
     alert(error); 
     return false; 
    } 
    return true; 
}