我有一个基于ASP.NET的网站,托管在提供商x上。 出于各种原因,我希望将用户上传的所有图像文件保存在托管提供商y的另一个站点上。 提供者y是基于PHP的。
将图像从x上的ASP.NET站点传输到提供程序y的“PHP Store”的最佳方法是什么?这些图像通过Web服务和“手动”文件上传进入ASP.NET站点。
存储图像时只是一个“问题”,在读取图像时,网址当然只是指向y上的位置。
我想唯一的方法是在PHP中创建一个Web服务,我可以使用x中的图像调用y,但还有其他更好的方法吗?如果没有,任何人都知道链接到该Web服务设置所需的ASP.NET和PHP代码的示例?
答案 0 :(得分:1)
只需在POST请求中发送原始数据......
php页面将确保该文件来自已批准的源,捕获并处理它。 (因为源只是一个特定的网站,也许允许所有来自网站的源IP地址的人都是安全的
Ideas on how to best accomplish this?
在请求(ASP.Net)方面,您需要使用HttpWebRequest和HttpWebResponse类。在响应(PHP)方面,它与处理表单提交没有任何不同。
答案 1 :(得分:1)
我认为当你说一个Web服务时,你指的是一个简单的REST Web服务,它包含一个PHP页面,用于解析发布的数据并将其存储在适当的位置。
如果我是对的,这似乎是向服务器Y提交图像的好方法。 如果没有,并且您引用了正确的SOAP / XML Web服务,我认为不需要使用这些高级方法来完成这个简单的任务。
简而言之,您只需要使用WebClient
在ASP.NET服务器端创建包含图像数据的POST WebRequest
。在PHP方面,您将收到发布的数据,并能够随心所欲地做任何事情。
这是最简单的方法,但根据传输的文件大小和任务的性质,还有其他替代方法,例如: - 如果要传输的文件很大或者不需要同步传输文件,您可以使用FTP协议,根据您的要求使用ad-hoc或集成解决方案;
答案 2 :(得分:1)
正如大家所说,做到这一点的方法是使用网络服务。 我找不到一个明确的例子如何在两端(ASP.NET和PHP)这样做,所以这是我最终得到的,它的工作原理。
PHP文件
<?php
$target_path = "uploadfolder/";
$target_path = $target_path . basename( $_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
echo "OK";
} else{
echo "ERROR ".$target_path;
}
?>
这就是我在ASP.NET方面所拥有的:
private void UploadFile(string postUrl, string postFilename)
{
WebClient wb = new WebClient();
try
{
byte[] responseArray = wb.UploadFile(postUrl, postFilename);
string resp = Encoding.UTF8.GetString(responseArray);
// You can read the response (resp) and check if you get an OK or ERROR from the PHP
}
catch (WebException e)
{
var response = (HttpWebResponse)e.Response;
// Do stuff based on the exception
}
}
用法:UploadFile(“http://www.domain.com/thephpscript.php”,FileUpload1.FileName);
我很幸运,当我使用.NET WebClient.UploadFile方法时,它将文件命名为'file',您需要在PHP端的$ _FILES关联数组中将其命名。 这是我发布这个的主要原因,所以我希望另一个善良的灵魂不必猜测。
当然,您应该采取措施来检查用户上传的文件类型等等,但这是基础知识。
答案 3 :(得分:0)
可以通过在PHP端使用webservice来保存发布为byte[]
在ASP.NET中发送文件如下: -
if (FileUpload1.HasFile)
{
string spath = Server.MapPath("" + FileUpload1.FileName);
FileUpload1.PostedFile.SaveAs(spath);
FileInfo fInfo = new FileInfo(spath);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(spath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
byte[] data = br.ReadBytes((int)numBytes);
br.Close();
string result = src.UploadFile(data, FileUpload1.FileName);
fStream.Close();
fStream.Dispose();
}
类src用于发送数据,即在PHP服务器上使用Web服务,这将使用文件名将数据保存为文件。