当前位置:编程学习 > C#/ASP.NET >>

怎么去搭建图片服务器

各位大侠,因为公司需要把web服务器和图片分开。所以想搭建一个图片服务器专门来存放网站上传的图片。请问这该如何实现啊。我想在图片服务器里面再建一个站点B然后用一个新域名去绑定。所有通过web服务器上传的图片都自动存放在图片服务器B下面,然后把得到的存放地址返回给web服务器,存入数据库里面。
现在问题是我在web服务器里面怎么去实现上传,然后还会得到上传后返回的地址呢。
急救啊!有谁知道的,帮下忙哦!!! 图片服务器 --------------------编程问答--------------------
引用 楼主 yjqi3316 的回复:
现在问题是我在web服务器里面怎么去实现上传,然后还会得到上传后返回的地址呢。
你会怎样向图片服务器传送文件?你先说“会什么传输文件方法”,别人才能告诉你“如何做”。

至于“上传后返回的地址”,这个就更奇怪了。你不是先规划好“图片的域名和url”了吗?比如说图片
     http://www.kaksdfjasdfa.com/class1/8823skfsfa.png
那么你传文件给图片服务器的时候就给它这两个参数(class和name)就行了,不用管它把文件放在哪里。就算是这两个参数是返回值(在一个实体对象中作为两个属性返回),那么你能说明“会什么传输文件方法”,这也就可以推论出返回值得问题。

基本上,你的问题都是需要自己先告诉别人“会什么”,别人才能给你考虑一个合适的“答案”的问题。

许多时候是这样,你能把自己先描述成什么样,决定了你能得到什么样的答案。 --------------------编程问答-------------------- 我会在单独一个服务器上面上传图片,但是我就是不清楚在web服务器的页面上面,怎么去跨服务器上传图片到另一个图片服务器上面。
我知道在web服务器里面,在页面代码里可以用myfile.PostedFile.SaveAs去实现上传。但是如果要上传到另外一个服务器我改怎么去用呢。 --------------------编程问答--------------------
引用 1 楼 sp1234 的回复:
引用 楼主 yjqi3316 的回复:
现在问题是我在web服务器里面怎么去实现上传,然后还会得到上传后返回的地址呢。你会怎样向图片服务器传送文件?你先说“会什么传输文件方法”,别人才能告诉你“如何做”。

至于“上传后返回的地址”,这个就更奇怪了。你不是先规划好“图片的域名和url”了吗?比如说图片
     http://www.kaksdfjasdfa.com/class1/8823……




我会在单独一个服务器上面上传图片,但是我就是不清楚在web服务器的页面上面,怎么去跨服务器上传图片到另一个图片服务器上面。
我知道在web服务器里面,在页面代码里可以用myfile.PostedFile.SaveAs去实现上传。但是如果要上传到另外一个服务器我改怎么去用呢。  --------------------编程问答-------------------- 可以另外创建一个windows服务每天在两天服务器间传数据 --------------------编程问答--------------------
引用 2 楼 yjqi3316 的回复:
我会在单独一个服务器上面上传图片,但是我就是不清楚在web服务器的页面上面,怎么去跨服务器上传图片到另一个图片服务器上面。
我知道在web服务器里面,在页面代码里可以用myfile.PostedFile.SaveAs去实现上传。但是如果要上传到另外一个服务器我改怎么去用呢。


一个asp.net应用程序向另外一个asp.net应用程序所写的网站传文件,使用类似这样的代码:
var path= "http://http://www.kaksdfjasdfa.com/uploadpng.ashx?c=class1&n=8823skfsfa.png";
new WebClient().UploadFile(path, 本地文件路径);
这就行了。而目标服务器——你得ashx或者aspx,使用普通的
Request.PostFiles[0]
即可,也就是你得“单独一个服务器上面上传图片”所用的那个读取文件方法。 --------------------编程问答-------------------- Request.PostFiles[0]    -->    Request.Files[0]



给你举个例子。假设服务器程序可以接受上传的.xps后缀的文件,并且放在abc文件夹下保存。当上传成功,此程序向客户端返回字符串"OK",否则就返回详尽的异常解释信息。代码就是这样的
using System;
using System.IO;
using System.Text;
using System.Web;

namespace TapWaterLeaders.Web
{
    public class XpsUpload : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string name = null;
            try
            {
                var file = context.Request.Files[0];
                var fileInfo = new FileInfo(file.FileName);
                name = fileInfo.Name;
                if (fileInfo.Extension.ToLower() != ".xps")
                    throw new InvalidDataException("上传文件的后缀必须是.xps。");

                var path = context.Server.MapPath("~/abc/xps/" + name);
                file.SaveAs(path);
                context.Response.Write("OK");
            }
            catch (Exception ex)
            {
                var sb = new StringBuilder(string.Format("接收上传文件“{0}”时发生异常。", name));
                sb.AppendLine();
                sb.Append(ex.ToString());
                context.Response.Write(sb.ToString());
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


如果需要,你还可以在程序里首先验证客户端IP,确定是从服务器A来的请求才保存其上传的文件。 --------------------编程问答-------------------- 在任意一个.net程序中——不管什么asp.net、silverlight还是什么,假设要上传一个文件,可以写
var ret = new WebClient().UploadFile("http://www.server.com/xpsUPload.ashx", 本地文件路径);
var s = Encoding.UTF8.GetString(ret);
if(s != "OK")
{
.......

这就可以了。客户端上传一个文件很简单。

传输一个文件有很多种方法,例如可以自己写socket和信令协议,甚至可以自己写简单的FTP服务器程序(因为FTP服务程序也是很简单地支持几个字符串指令就能跑起来),或者支持接收你通过发邮件来上传的文件,甚至可以使用支持XMPP的程序来支持跨IM聊天程序来直接传送文件,等等。设计师可以信手拈来,根据深入一点的具体要求不同而设计不同的程序。关键地,你在设计时要先用至少一种自己熟悉的方法实现功能,然后有闲工夫的时候才重新设计第二种程序。 --------------------编程问答--------------------
引用 7 楼 sp1234 的回复:
在任意一个.net程序中——不管什么asp.net、silverlight还是什么,假设要上传一个文件,可以写


C# code
?



12345

var ret = new WebClient().UploadFile("http://www.server.com/xpsUPload.ashx", 本地文件路径); var s = Encoding.UTF8.GetS……



我套用你的上传,怎么还是失败呢:
web服务器端如下:

    protected void Button1_Click(object sender, EventArgs e)
    {
        string PictureName = "";
        try
        {
            //PictureName = this.UploadPicture(this.Picture, "Picture");
            //new WebClient().UploadFile(path, 本地文件路径);
            var ret = new WebClient().UploadFile("http://localhost:82/imgupload.ashx", this.Picture.PostedFile.FileName);
            var s = Encoding.UTF8.GetString(ret);
            if (s == "ok")
            {
                this.lbimgurl.Text = "上传成功";
            }
            else
            {
                this.lbimgurl.Text = "上传失败";
            }
        }
        catch (Exception ex)
        {

        }
        finally
        {
        }
    }



图片服务器端,我直接用你的做测试:

public class imgupload : IHttpHandler 
{
    
    //public void ProcessRequest (HttpContext context) {
    //    context.Response.ContentType = "text/plain";
    //    context.Response.Write("Hello World");
    //}

    public void ProcessRequest(HttpContext context) 
    { 
        context.Response.ContentType = "text/plain"; 
        string name = null; 
        try 
        { 
            var file = context.Request.Files[0]; 
            var fileInfo = new FileInfo(file.FileName); 
            name = fileInfo.Name;
            if (fileInfo.Extension.ToLower() != ".xps")
            {
                throw new InvalidDataException("上传文件的后缀必须是.xps。");
            }
            var path = context.Server.MapPath("~/abc/xps/" + name); 
            file.SaveAs(path); 
            context.Response.Write("OK"); 
        } 
        catch (Exception ex) 
        { 
            var sb = new StringBuilder(string.Format("接收上传文件“{0}”时发生异常。", name)); 
            sb.AppendLine(); 
            sb.Append(ex.ToString()); 
            context.Response.Write(sb.ToString()); 
        } 
    } 
 
    public bool IsReusable 
    {
        get 
        {
            return false;
        }
    }
}


服务器端页面代码:

    <div>
    <INPUT type="file" class="Input" id="Picture" runat="server">
    </div>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    <asp:Label ID="lbimgurl" runat="server"></asp:Label>



最后还是不成功,我调试,它也不运行图片服务器上面的程序,我上传的也是.xps文件。我还没有去改图片上传部分呢。请问这是怎么回事啊。 --------------------编程问答-------------------- 顺便问问,我现在两个网站都放在我自己电脑上面,到时两个网站都放在不同的服务器上面,这有什么影响吗。而且如果有问题,我在本机怎么去调试两个不在同一个项目中的网站啊。 --------------------编程问答-------------------- 首先要清楚你是想图片是直接上传到图片服务器,还是想通过文字服务器再转到图片服务器。两者处理方式不一样。上面大部分是通过服务器中转,这样做好处是程序改动量小,缺点是两次图片传递处理。第二种方法是直接上传到图片服务器,可以采用flash插件或者嵌套iframe框架,事先把图片名字命好,避免名字重复,可以用日期加随机数,不用非等返回文件名。只是说看法,没有源代码。 --------------------编程问答-------------------- 到web server本地,web ser再到图片ser。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,