文件从一个域上传到另一个域

时间:2012-10-04 11:50:43

标签: c# asp.net

我创建了一个有两个模块的网站,

  1. ADMIN
  2. USER
  3. 它们托管在不同的域上。现在当用户打开其域名时,假设其 abc.com 并且可以注册他们的公司并从那里上传照片,上传的照片将进入 Company_Logo FOLDER 。 现在假设ADMIN的域名为 xyz.com 。现在我希望ADMIN打开它的xyz.com并且可以看到从abc.com上传的照片现在我想要来自xyz.com的ADMIN手段可以将上传的照片更改为在Company_Logo FOLDER中的abc.com。

    简短的照片在用户端上传,位于abc.com上,并从xyz.com上的ADMIN端取代,所以我该怎么做

4 个答案:

答案 0 :(得分:1)

您有两种选择。

  • 如果您的两个站点都托管在同一台计算机或共享托管环境中,那么您的站点可能会访问其他目录。在这种情况下,您可以轻松地将图像放在所需的文件夹中。

  • 现在是第二种情况,其中一个网站无法访问其他网站的文件夹, - 它相当复杂。您必须创建一个代理,管理站点将接受该图像,然后它将把它放在主站点文件夹中。我不建议这样做。

答案 1 :(得分:1)

因此,您有两个不同的站点,托管在不同的域甚至不同的服务器上,并且您希望站点A在上载某个文件时通知站点B.然后,您希望能够从站点B更改站点A上的该文件。

在我看来,你需要在网站A上创建某种API,它允许来自网站B的用户(管理员)检查最近上传的文件,并让他们覆盖它。

答案 2 :(得分:1)

好的,这可以完成,但您需要使用HttpHandler。你可以找到一个很好的例子here,但我会列出重要的部分。我不能在这里为你写完整个处理程序。

首先,让我们在Web项目中构建一个类,并将其命名为ImageHandler ...

public class ImageHandler : IHttpHandler
{
}

...接下来让我们实现界面...

public bool IsReusable
{
    get { return false; }
}

public void ProcessRequest(HttpContext context)
{
    // find out what we're trying to do first
    string method = context.Request.HttpMethod;

    switch (method)
    {
        case "GET":
            // read the query string for the document name or ID

            // read the file in from the shared folder

            // write those bytes to the response, ensuring to set the Reponse.ContentType
            // and also remember to issue Reponse.Clear()

            break;
        case "PUT":
            // read the Headers from the Request to get the byte[] of the file to CREATE

            // write those bytes to disk

            // construct a 200 response

            break;
        case "POST":
            // read the Headers from the Request to get the byte[] of the file to UPDATE

            // write those bytes to disk

            // construct a 200 response

            break;
        case "DELETE":
            // read the Headers from the Request to get the byte[] of the file to DELETE

            // write those bytes to disk

            // construct a 200 response

            break;
    }
}

...最后我们需要在web.config ...

中设置处理程序
<configuration>
   <system.web>
      <httpHandlers>
         <!-- remember that you need to replace the {YourNamespace} with your fully qualified -->
         <!-- namespace and you need to replace {YourAssemblyName} with your assembly name    -->
         <!-- EXCLUDING the .dll                                                              -->
         <add verb="*" path="*/images/*" type="{YourNamespace}.ImageHandler, {YourAssemblyName}" />
      </httpHandlers>
   </system.web>
</configuration>

最后 ,你还想做的事情就是传递某种会话密钥,当你进入处理程序时可以验证它,否则这个向所有人开放。如果你不需要PUTPOSTDELETE动词,那就无所谓了。

从技术上讲,如果你不关心每个人都可以访问GET,你就不需要检查GET上的会话密钥,但你必须检查其他人。

答案 3 :(得分:0)

您可以分两步完成:

1)使用标准文件上传机制

将图像上传到服务器

2)在原始上传后,使用HttpWebRequest类将图像上传到服务器端的不同服务器。 请参阅此文章:Upload files with HTTPWebrequest (multipart/form-data)

见此参考: http://forums.asp.net/t/1726911.aspx/1