使用案例:我正在处理使用ajax upload功能的图片上传器。我想将图片上传到网站上创建的子域用户。例如,当用户创建时网站上的一个域我复制了一个php脚本,用于将图像上传到新域名image-cropping.php
。我想在用户将任何图像上传到他的域名时向该文件发送请求。
问题:
当我尝试上传图片时,我得到Error: Permission denied to access property 'readyState'
。我的 js文件正在xyz.google.com
上上传php脚本位于abc.google.com
。
研究
在做了一些谷歌搜索和研究后,我学会了javascript不允许发送请求跨域,它需要一个http代理来处理这个。这是我试过的代码。运行ajax上传器的脚本。在操作中,我有在其他域上文件的路径(路径是动态构建的)。
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)
时,我的上传脚本上出现了一个空白数组。< / p>
我相信我错过了什么!!有人可以纠正吗? 谢谢你的时间!
答案 0 :(得分:1)
1和2)您必须将代理设置为操作,因为这是允许您上传文件的位置。然后,代理将向另一个域发出请求,在那里它可以将文件发送到。
3)取决于您的代理实施。您应该避免在本地存储文件或从用户输入执行/包含任何内容,就像编写php脚本时一样。直接将tmp文件发送到目标服务器,这也是最快的实现。