我无法找到从URL中读取图片并使用JavaScript/Ajax上传图片的正确方法。从URL上传图片并上传
假设有一个URL:https://pbs.twimg.com/profile_images/1580483969/parisjs_transparent.png
。
我现在应该可以上传它了,但是我想首先上传我需要下载它,那么程序是什么?
我无法找到从URL中读取图片并使用JavaScript/Ajax上传图片的正确方法。从URL上传图片并上传
假设有一个URL:https://pbs.twimg.com/profile_images/1580483969/parisjs_transparent.png
。
我现在应该可以上传它了,但是我想首先上传我需要下载它,那么程序是什么?
让服务器下载/上传您的图片。你需要做的是为图片URL创建一个文本输入框。比通过AJAX发送到后端的URL只有服务器获取其内容。
@DheerajAgrawal
看看这个例子: http://jsfiddle.net/WQXXT/3004/
你应该自定义,在那里说:
alert('start upload script here');
如果远程服务器允许CORS请求时,它可以下载一个远程图像并阅读其内容。如果远程服务器不允许CORS,则可以显示图像(使用标准<img src="..">
标签),但不能读取内容 - canvas gets tainted。从使用JavaScript远程URL
function getImageFormUrl(url, callback) {
var img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.onload = function (a) {
\t var canvas = document.createElement("canvas");
\t canvas.width = this.width;
\t canvas.height = this.height;
\t var ctx = canvas.getContext("2d");
\t ctx.drawImage(this, 0, 0);
\t var dataURI = canvas.toDataURL("image/jpg");
\t
\t // convert base64/URLEncoded data component to raw binary data held in a string
\t var byteString;
\t if (dataURI.split(',')[0].indexOf('base64') >= 0)
\t \t byteString = atob(dataURI.split(',')[1]);
\t else
\t \t byteString = unescape(dataURI.split(',')[1]);
\t // separate out the mime component
\t var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
\t // write the bytes of the string to a typed array
\t var ia = new Uint8Array(byteString.length);
\t for (var i = 0; i < byteString.length; i++) {
\t \t ia[i] = byteString.charCodeAt(i);
\t }
\t return callback(new Blob([ia], { type: mimeString }));
}
img.src = url;
}
getImageFormUrl('https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/The_Sun_by_the_Atmospheric_Imaging_Assembly_of_NASA%27s_Solar_Dynamics_Observatory_-_20100819.jpg/628px-The_Sun_by_the_Atmospheric_Imaging_Assembly_of_NASA%27s_Solar_Dynamics_Observatory_-_20100819.jpg', function (blobImage) {
\t var formData = new FormData();
\t formData.append('key1', 'value1');
\t formData.append('key2', 'value2');
\t formData.append('key2', 'value3');
\t formData.append('imageToUpload', blobImage);
\t
\t console.log(blobImage);
\t //use formData in "data" property in $.ajax
\t //$.ajax({
\t \t //blabla: blabla,
\t \t //data: formData,
\t \t //blabla: blabla
\t //}})
});
文本输入字段或文件输入字段?那么我只需要将图像url发送到服务器? –
只需输入一个文本即可粘贴网址。比你发送它到PHP和那里你得到的图像内容。检查[这个Q/A](http://stackoverflow.com/questions/909374/copy-image-from-remote-server-over-http)。 – skobaljic