在ASP.NET站点和PHP站点之间传输文件的最佳方式是什么?
我有一个基于ASP.NET的网站,托管在提供商x。 出于各种原因,我希望将用户上传的所有图像文件保存在由提供商y托管的另一个网站上。 提供者y是基于PHP的 将图像从x上的ASP.NET站点传输到提供商y上的“PHP存储”的最佳方式是什么?这些图像通过web服务和“手动”文件上传进入ASP.NET网站 这只是存储图像时的一个“问题”,在读取图像时,URL当然只会指向y上的位置在ASP.NET站点和PHP站点之间传输文件的最佳方式是什么?,php,asp.net,Php,Asp.net,我有一个基于ASP.NET的网站,托管在提供商x。 出于各种原因,我希望将用户上传的所有图像文件保存在由提供商y托管的另一个网站上。 提供者y是基于PHP的 将图像从x上的ASP.NET站点传输到提供商y上的“PHP存储”的最佳方式是什么?这些图像通过web服务和“手动”文件上传进入ASP.NET网站 这只是存储图像时的一个“问题”,在读取图像时,URL当然只会指向y上的位置 我想唯一的方法是用PHP创建一个web服务,我可以用x中的图像在y调用它,但是还有其他更好的方法吗?如果没有,任何人都知
我想唯一的方法是用PHP创建一个web服务,我可以用x中的图像在y调用它,但是还有其他更好的方法吗?如果没有,任何人都知道该web服务设置所需的ASP.NET和PHP代码示例的链接?只需在POST请求中发送原始数据 php页面将确保文件来自批准的来源,捕获并处理它。(因为源代码只是一个特定的网站,所以允许所有来自该网站的源IP地址可能是安全的
Ideas on how to best accomplish this?
在请求端(ASP.Net),您需要使用和类。在响应端(PHP)另一方面,它与处理表单提交没有任何区别。我认为,当你说一个Web服务时,你指的是一个简单的REST Web服务,它包含在一个PHP页面中,解析发布的数据并将其存储在适当的位置 如果我是对的,那么这似乎是向服务器Y提交图像的一个好方法。 如果没有,并且您参考了一个合适的SOAP/XMLWeb服务,我认为不需要仅使用这些高级方法来完成这个简单的任务 简言之,您只需使用
WebClient
在ASP.NET服务器端生成包含图像数据的POSTWebRequest
。在PHP端,您将接收发布的数据,并可以对其执行任何操作
这是最简单的方法,但根据传输文件的大小和任务的性质,还有其他替代方法,例如:
-如果要传输的文件很大,或者不需要同步传输文件,您可以使用FTP协议,根据您的需要使用临时或集成解决方案;这可以通过在PHP端使用webservice来完成,以
字节[]的形式保存文件。
在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服务,该服务器将数据保存为带有文件名的文件。正如大家所建议的,方法是使用web服务。 我找不到一个清晰的例子来说明如何在两端(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;
}
?>
用法:上载文件(“http://www.domain.com/thephpscript.php,FileUpload1.FileName)
我很幸运地猜到,当您使用.NET WebClient.UploadFile方法时,它会将文件命名为“file”,您需要在PHP端的$\u FILES关联数组中知道这一点。
这就是我发布这篇文章的主要原因,所以我希望另一个善良的灵魂不必猜测
当然,你应该采取措施来检查用户上传的文件类型等,但这是最基本的。只需在POST请求中向PHP发送原始数据。要求最佳方式执行x的问题通常被认为是离题的。并且通常会被认为是“没有建设性的”。这是因为通常有多种方法可以获得特定的解决方案,并且根据提供的信息,很难给出准确和正确的答案。此外,问题的最后一部分基本上会问(或者至少读起来像是问):“请给我代码”.在这个网站上,我们希望答案是具体的。在目前的形式下,这个问题太广泛了。是的,这就是我的想法-一个简单的PHP脚本来处理图像。文件很小(每个最大100KB)并且需要立即传输,所以我想这是唯一的方法。我得到了ASP文件读取部分,但我想看看您在src类中做了什么。我的意思是在post之前放置字节[]。在php中创建一个服务,比如uploadfile(字节[]f,字符串文件名),它将获取原始字节[]当您将此服务添加为asp.net中的引用时,vs将注意序列化您的字节[]它是自己的。但是,如果你想自己做,那么你就必须使用streams。正如我所想的那样……不要忘记创建一些故障预防和恢复逻辑,因为其他服务器可能会因为任何原因在某一时刻不可用,你需要安排在将来重复交付。@svrx这是一个很好的观点,以及对其他人有价值的输入。我将创建一个“队列系统”,以便在图像失败后再次发送。这也将简化维护,当我们需要部署更新时,甚至将PHP站点移动到其他地方。
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
}
}