Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET站点和PHP站点之间传输文件的最佳方式是什么?_Php_Asp.net - Fatal编程技术网

在ASP.NET站点和PHP站点之间传输文件的最佳方式是什么?

在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调用它,但是还有其他更好的方法吗?如果没有,任何人都知

我有一个基于ASP.NET的网站,托管在提供商x。 出于各种原因,我希望将用户上传的所有图像文件保存在由提供商y托管的另一个网站上。 提供者y是基于PHP的

将图像从x上的ASP.NET站点传输到提供商y上的“PHP存储”的最佳方式是什么?这些图像通过web服务和“手动”文件上传进入ASP.NET网站

这只是存储图像时的一个“问题”,在读取图像时,URL当然只会指向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服务器端生成包含图像数据的POST
WebRequest
。在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
        }
    }