[英]Downloadable data link for HTTP POST using JavaScript
我有一個HTTP POST REST終結點,該終結點使用圖像並返回帶有圖像中像素數據的HTML文檔。 HTTP響應包括標頭Content-Disposition:附件; filename = Pixels.html,以便瀏覽器提示下載。
我想要一個HTML / JavaScript(不是jQuery)應用,
<input id="fid" name="fid" type="file" />
<p onclick="javascript: getPixels()">Get Pixels</p>
)。 我該怎么做呢? 我嘗試了以下代碼:
function getPixels() {
var input = document.getElementById("fid");
if (input.files && input.files[0]) {
if (typeof (FileReader) != "undefined") {
var reader = new FileReader();
reader.onload = function (e) {
var imgData = e.target.result;
var postUrl = "./GetPixelsService.svc/image";
var xhr = new XMLHttpRequest();
xhr.open("POST", postUrl);
xhr.setRequestHeader("Content-Type", "image/png");
//xhr.onreadystatechange = function () {
// if (xhr.readyState === 4) {
// var res_display = document.getElementById("results");
// res_display.srcdoc = xhr.responseText;
// }
//}
xhr.send(imgData);
};
reader.readAsArrayBuffer(input.files[0]);
}
}
}
以下是調用上述函數的HTML腳本。
<p>
Upload the image here:
</p>
<input id="fid" name="fid" type="file" />
<!--<button type="submit" onclick="javascript: getPixels()">Get Pixels</button>-->
<p onclick="javascript: getPixels()">Get Pixels</p>
<p />
<hr />
<p>
<img id="img2check" src="" alt="" />
</p>
<p />
<iframe id="results" style="width: 100%; border: 0; height: 400px;" src="javascript:;">
Your browser does not support iframes.
</iframe>
我能夠選擇響應並將其顯示在iframe中,但無法讓瀏覽器下載內容。
感謝您的幫助。 我已經看過StackOverflow上的相關問題,但到目前為止沒有任何幫助。
提前致謝。
您不能強制客戶端瀏覽器使用XMLHttpRequest提示保存對話框。
您可以執行以下操作:
1:檢查我對另一個與此類似問題的答案: 如何通過javascript ajax獲取pdf文件
2:在服務器上生成文件或創建get
類型請求處理程序,並使用download
屬性為其提供鏈接。 http://www.w3schools.com/TAgs/att_a_download.asp
3:使用第三方應用程序,例如Downloadify: https : //github.com/dcneiner/Downloadify
4:還有一種使用Blob
,我還沒有嘗試過,在這里: 瀏覽器/ HTML從src =“ data:image / jpeg; base64 ...”強制下載圖像 。 這篇文章是關於base64圖像的,但是我認為值得嘗試使用html
文件。
感謝er-han,以下代碼實現了目標。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript">
function getPixels() {
showImage();
var input = document.getElementById("fid");
if (input.files && input.files[0]) {
if (typeof (FileReader) != "undefined") {
var reader = new FileReader();
reader.onload = function (e) {
var imgData = e.target.result;
var postUrl = "./SimpleService.svc/image";
var xhr = new XMLHttpRequest();
xhr.open("POST", postUrl);
xhr.setRequestHeader("Content-Type", "image/png");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
var res_url = URL.createObjectURL(new Blob([xhr.responseText]));
var lnk = document.getElementById("dlink");
lnk.href = res_url;
lnk.style.display = "block";
}
}
xhr.send(imgData);
};
reader.readAsArrayBuffer(input.files[0]);
}
}
}
function showImage() {
var input = document.getElementById("fid");
if (input.files && input.files[0]) {
if (typeof (FileReader) != "undefined") {
var reader = new FileReader();
reader.onload = function (e) {
var img_display = document.getElementById("img2check");
img_display.src = e.target.result;
};
reader.readAsDataURL(input.files[0]);
}
}
}
</script>
<p>
Upload the image here:
</p>
<input id="fid" name="fid" type="file" />
<p/>
<button type="submit" onclick="javascript: getPixels()">Upload</button>
<p />
<hr />
<p>
<img id="img2check" src="" alt="" />
</p>
<p />
<p>
<a id="dlink" href="#" download="Data.html" style="display: none;">Download data</a>
</p>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.