怎么去搭建图片服务器
各位大侠,因为公司需要把web服务器和图片分开。所以想搭建一个图片服务器专门来存放网站上传的图片。请问这该如何实现啊。我想在图片服务器里面再建一个站点B然后用一个新域名去绑定。所有通过web服务器上传的图片都自动存放在图片服务器B下面,然后把得到的存放地址返回给web服务器,存入数据库里面。现在问题是我在web服务器里面怎么去实现上传,然后还会得到上传后返回的地址呢。
急救啊!有谁知道的,帮下忙哦!!! 图片服务器 --------------------编程问答-------------------- 你会怎样向图片服务器传送文件?你先说“会什么传输文件方法”,别人才能告诉你“如何做”。
至于“上传后返回的地址”,这个就更奇怪了。你不是先规划好“图片的域名和url”了吗?比如说图片
http://www.kaksdfjasdfa.com/class1/8823skfsfa.png
那么你传文件给图片服务器的时候就给它这两个参数(class和name)就行了,不用管它把文件放在哪里。就算是这两个参数是返回值(在一个实体对象中作为两个属性返回),那么你能说明“会什么传输文件方法”,这也就可以推论出返回值得问题。
基本上,你的问题都是需要自己先告诉别人“会什么”,别人才能给你考虑一个合适的“答案”的问题。
许多时候是这样,你能把自己先描述成什么样,决定了你能得到什么样的答案。 --------------------编程问答-------------------- 我会在单独一个服务器上面上传图片,但是我就是不清楚在web服务器的页面上面,怎么去跨服务器上传图片到另一个图片服务器上面。
我知道在web服务器里面,在页面代码里可以用myfile.PostedFile.SaveAs去实现上传。但是如果要上传到另外一个服务器我改怎么去用呢。 --------------------编程问答--------------------
我会在单独一个服务器上面上传图片,但是我就是不清楚在web服务器的页面上面,怎么去跨服务器上传图片到另一个图片服务器上面。
我知道在web服务器里面,在页面代码里可以用myfile.PostedFile.SaveAs去实现上传。但是如果要上传到另外一个服务器我改怎么去用呢。 --------------------编程问答-------------------- 可以另外创建一个windows服务每天在两天服务器间传数据 --------------------编程问答--------------------
一个asp.net应用程序向另外一个asp.net应用程序所写的网站传文件,使用类似这样的代码:
var path= "http://http://www.kaksdfjasdfa.com/uploadpng.ashx?c=class1&n=8823skfsfa.png";这就行了。而目标服务器——你得ashx或者aspx,使用普通的
new WebClient().UploadFile(path, 本地文件路径);
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聊天程序来直接传送文件,等等。设计师可以信手拈来,根据深入一点的具体要求不同而设计不同的程序。关键地,你在设计时要先用至少一种自己熟悉的方法实现功能,然后有闲工夫的时候才重新设计第二种程序。 --------------------编程问答--------------------
我套用你的上传,怎么还是失败呢:
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