用例:我正在开发一个使用 ajax upload 的图片 uploader 功能。我想将图像上传到用户在网站上创建的子域。例如,当用户在网站上创建域时,我复制了一个 php 脚本,用于将图像上传到新域即 image-cropping.php
。当用户将任何图像上传到他的域时,我想向该文件发送请求。
问题:
当我尝试上传图像时出现错误:访问属性“readyState”的权限被拒绝
。我正在调用js 文件 在 xyz.google.com
上,上传 php 脚本在 abc.google.com
上。
研究
在做了一些谷歌搜索和研究后,我了解到 javascript 不允许跨域发送请求,它需要一个 http 代理来处理这个。这是我试过的代码。运行 ajax uploader 的脚本.在行动中,我有其他域上文件的路径(路径是动态构建的)。
new AjaxUpload(btnUpload, {
action: 'includes/modules/domain_creation/proxy.php',
name: 'image',
onSubmit: function(file, ext){
if (! (ext && /^(jpg|png|jpeg|gif|JPG|JPEG|PNG|GIF)$/.test(ext))){
alert('Only JPG, PNG or GIF files are allowed');
return false;
}
$('#thumbImg').html('<img src="http://localhost/gobiggi_VS_2_2/images/appImages/imageLoader.png" />');
},
1) 我是否以正确的方式进行操作(第一次使用)?实际需要代理吗?
2)我如何以及在哪里可以设置代理以便可以协商错误权限?
3)它打开了哪些安全问题(安全吗?如果不安全,还有什么替代方案)?任何指示或建议都会对我有所帮助。
感谢您的宝贵时间。
更新:
我正在使用这个代理 script用于上传图片。部分代码为
$domainUsername = $_SESSION['domainUsername'];
$domainNameWeb = $_SESSION['domainName'];
//$fileParameterProxy = $_FILES['image'];
//Destination URL: Where this proxy leads to the upload script
$destinationURL = 'http://www.'.$domainNameWeb.'/'.$domainUsername.'/upload.php';
//The only domain from which requests are authorized.
$RequestDomain = 'abc.net';
现在我没有得到Error for permission
但我无法将图像发送到服务器。当我尝试执行 print_r($_FILES)
我的上传脚本中有一个空白数组。
我相信我遗漏了什么!!有人可以纠正吗?
感谢您的宝贵时间!
最佳答案
1 和 2) 您必须将代理设置为操作,因为这是允许您上传文件的地方。然后,代理会将请求发送到另一个域,它可以将文件发送到该域。
3) 取决于您的代理实现。您应该避免在本地存储文件或执行/包含来自用户输入的任何内容,就像在编写 php 脚本时一样。直接将tmp文件发送到目标服务器,这也是最快的实现方式。
关于php - 使用 'iframe' 在 php 中创建一个用于上传图片的 http 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832334/