-1

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

将图像从我在 x 上的 ASP.NET 站点传输到提供商 y 的“PHP 商店”的最佳方式是什么?图像通过 Web 服务和“手动”文件上传进入 ASP.NET 站点。

存储图像时这只是一个“问题”,在读取图像 url 时当然会指向 y 上的位置。

我想唯一的方法是在 PHP 中创建一个 Web 服务,我可以在 y 处使用来自 x 的图像调用它,但是还有其他更好的方法吗?如果没有,任何人都知道该 Web 服务设置所需的 ASP.NET 和 PHP 代码示例的链接吗?

4

4 回答 4

1

只需在 POST 请求中发送原始数据……</p>

php 页面将确保文件来自批准的来源、捕获并处理它。(因为源只是一个特定的网站,也许允许所有来自该网站的源IP地址是安全的

Ideas on how to best accomplish this?

在请求 (ASP.Net) 端,您将需要使用HttpWebRequestHttpWebResponse类。在响应(PHP)方面,它与处理表单提交没有什么不同。

于 2012-12-27T12:17:51.863 回答
1

我假设当您说 Web 服务时,您指的是一个简单的 REST Web 服务,它包含在一个 PHP 页面中,该页面解析发布的数据并将其存储在适当的位置。

如果我是对的,是的,这似乎是向服务器 Y 提交图像的好方法。如果不是,并且您指的是适当的 SOAP/XML Web 服务,我认为没有必要仅使用此类高级方法来完成此操作简单的任务。

简而言之,您只需要在 ASP.NET 服务器端使用 aWebClient来制作包含图像数据的 POST 。WebRequest在 PHP 端,您将收到发布的数据,并能够对它做任何您想做的事情。

这是最简单的方法,但根据传输文件的大小和任务的性质,还有其他选择,例如: - 如果要传输的文件很大或不需要同步传输文件,您可以使用FTP 协议,根据您的要求使用 ad-hoc 或集成解决方案;

于 2012-12-27T12:20:11.063 回答
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 方法时,它会将文件命名为“文件”,您需要在 PHP 端的 $_FILES 关联数组中知道该文件。这就是我发布这个的主要原因,所以我希望另一个善良的灵魂不必猜测。

当然,您应该采取措施检查用户上传的文件类型等,但这是基础。

于 2012-12-27T16:10:54.060 回答
0

它可以通过在 PHP 端使用 web 服务来保存一个发布为的文件来完成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 服务,它将数据保存为具有其文件名的文件。

于 2012-12-27T12:38:29.710 回答