HTML5+AJAX+WEBAPI 檔案上傳

來源:互聯網
上載者:User

標籤:

總體的思路是把檔案轉換成base64字串傳遞給後台,然後再把base64字串轉換成二進位,轉成檔案。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>????html5 File???? for pic2base64</title>    <script src="Scripts/jquery-1.8.2.js"></script>    <style>    </style>    <script>        window.onload = function () {            var input = document.getElementById("demo_input");            var result = document.getElementById("result");            var img_area = document.getElementById("img_area");            if (typeof (FileReader) === ‘undefined‘) {                result.innerHTML = "?????????????????? FileReader?????????????????????";                input.setAttribute(‘disabled‘, ‘disabled‘);            } else {                input.addEventListener(‘change‘, readFile, false);            }        }        function readFile() {            var file = this.files[0];            var reader = new FileReader();            reader.readAsDataURL(file);            reader.onload = function (e) {                result.value = this.result;                            $.ajax({                                 type: "POST",                    url: "神秘的URL/api/TabCompany/POSTUploadCompanyWeChatImg",                    data: { "base64": result.value, "type": ".jpg" },//所有上傳檔案統一為此對象。result.value 不再截取。type 為檔案類型,帶.                    success: function (data) {                                 alert("6666666");                        alert(data);                                    },                    error: function (XMLHttpRequest, textStatus, errorThrown) {                        alert(XMLHttpRequest.status);                        alert(XMLHttpRequest.readyState);                        alert(textStatus);                    }                });                          }        }    </script></head><body>    <input type="file" value="sdgsdg" id="demo_input" />    <textarea id="result" rows=30 cols=300></textarea>    <p id="img_area"></p></body></html>

後端代碼如下

   public string POSTUploadCompanyWeChatImg([FromBody]file base64)        {            quence = new ConsenQuance();            try            {                string type = base64.type;                string base64str = base64.base64.Split(‘,‘)[1];                byte[] data = Convert.FromBase64String(base64str);                string savePath = "/FileCompanyWeCha/"; //虛擬路徑,項目中的虛擬路徑。一般我們條用這個方法,肯定要把產生的word文檔儲存在項目的一個檔案夾下,以備後續使用                string path = ResumePath;//System.Web.HttpContext.Current.Server.MapPath(savePath); //把相應的虛擬路徑轉換成實體路徑                if (!System.IO.Directory.Exists(path))                {                    Directory.CreateDirectory(path);                }                savePath += Guid.NewGuid().ToString() + type;                string filePath = ResumePath + savePath;// System.Web.HttpContext.Current.Server.MapPath(savePath);                FileStream fs;                if (System.IO.File.Exists(filePath))                {                    fs = new FileStream(filePath, FileMode.Truncate);                }                else                {                    fs = new FileStream(filePath, FileMode.CreateNew);                }                BinaryWriter br = new BinaryWriter(fs);                br.Write(data, 0, data.Length);                br.Close();                fs.Close();                if (System.IO.File.Exists(filePath))                {                    quence.Result = true;                    quence.ReturnStr = savePath;                }                else                {                    quence.Result = false;                    quence.ErrMsg = "伺服器建立文檔失敗";                }            }            catch (Exception ex)            {                quence.Result = false;                quence.ErrMsg = ex.Message;            }            return JsonHelp.JsonSerializer<ConsenQuance>(quence);        }
 參數實體類  public   class file
    {
        public string base64 { get; set; }
        public string type { get; set; }
    }

 

用這個代碼。並不存在跨域問題。

AJAX解決跨域問題是很鬱悶的事情。

另外值得一提的是。WEBAPI的POST請求和WEBSERVICE的是不同的。

HTML5+AJAX+WEBAPI 檔案上傳

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.