1. 程式人生 > >前端Ajax實現預覽TXT文件(相容UTF-8,ANCII,Unicode)

前端Ajax實現預覽TXT文件(相容UTF-8,ANCII,Unicode)

最近在做文件的預覽問題,在做txt的時候,原本是用HTML <object> 標籤,但是讀取的時候亂碼,經查詢資料,知道了原來txt文件預設的是ANCII編碼,解決辦法如下;

一、將ANCII轉Unicode,但是沒有成功,

//ASCII 轉換 Unicode
function AsciiToUnicode(content) {
    result = '';
    for (var i=0; i<content.length; i++)
        result+='&#' + content.charCodeAt(i) + ';';
    return result;
}

二、後來再查詢資料,知道了html5裡面有FileReader函式,測試也是可以讀取三種檔案,但是不能對編碼格式做設定,然後在專案中測試也失敗了

<!DOCTYPE html>
<html lang="en">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="js/jquery-1.11.1.min.js"></script>
    <title>js實現線上預覽圖片與TXT文件</title>
</head>

<body>
    <input type="file" onchange="preview(this.files)" id="inputBox" />
    <script>
    function preview(files) {
        if (files.length) {
            var file = files[0];
            var reader = new FileReader(); //new一個FileReader例項
            if (/text+/.test(file.type)) { //判斷檔案型別,是不是text型別
                reader.onload = function() {
                    $('body').append('<pre>' + this.result + '</pre>');
                }
                reader.readAsText(file, 'gb2312');
            } else if (/image+/.test(file.type)) { //判斷檔案是不是imgage型別
                reader.onload = function() {
                    $('body').append('<img src="' + this.result + '"/>');
                }
                reader.readAsDataURL(file);
            }
        }
    }
    </script>
</body>
</html>

三、然後再查資料,查到ajax的時候,知道其可以對編碼格式做設定,果斷嘗試,測試demo如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    function viewfile(){
        var request=null;
        if(window.XMLHttpRequest){request=new XMLHttpRequest();}else if(window.ActiveXObject){request=new ActiveXObject("Microsoft.XMLHTTP");}
        if(request){
            request.open("GET","/one/downloadFile.spe?dtype=PostgresXL&mode=html&fileid=2018171716930001001",true);
            request.overrideMimeType("text/html;charset=gb2312");//設定以gb2312編碼識別資料
            request.onreadystatechange=function(){
                if(request.readyState===4){
                    if (request.status == 200 || request.status == 0){
                        //var reader = new FileReader();
                        alert(request.responseText);
                        document.getElementById("vv").innerHTML=request.responseText;
                    }
                }
            }
            request.send(null);
        }else{
            alert("error");
        }
    }
</script>
<input type="button" value="預覽" onclick="viewfile();"/>
<div id="vv"></div>
</body>
</html>

結果截圖:

將其運用到專案中時候,在ajax的URl傳多個引數的時候,正確方式使用如下

 url : "/one/downloadFile.spe?dtype=PostgresXL&mode=html&fileid="+fileId+"&fileName="+fileName

 至此,這個問題算解決了,