ASP.NET跨服务器上传文件的实现

之前转载了一篇跨服务器上传文件的实现文章,里面有三种方法,一种都没有测试成功。后来自己写了一稿,供有需求的网友使用。需求:在一台web服务器的页面上传文件时,将文件上传到指定的另一台静态文件服务器上,达到负载分担效果。代码如下:

web服务器上的核心代码:

前台页面

<div runat="server" id="divWkUploadQrCode" Visible="true" class="divUploadQrCode">
    <div class="divFenge2"></div>
请点击"选择图片",选取自己二维码上传
<div class="divFenge2"></div>
<input id="tbxWkSelect" type="text" class="tbximage" readonly="readonly"/><input id="Button1" type="button" value="选择图片" class="btnimage" οnclick="FileUpload1.click()"/>
<asp:FileUpload ID="FileUpload1" runat="server" οnchange="tbxWkSelect.value=this.value" Style="width:0px;visibility:hidden;" />
<div class="divFenge2"></div>
<asp:Button ID="BtnSub" Runat="server" OnClick="UploadImageWk1" class="btnsubmit" Text="上传个人二维码"></asp:Button>
<div class="divFenge2"></div>

</div>


后台代码

protected void UploadImageWk1(object sender, EventArgs e)
{
if(FileUpload1.FileName != "")
{
string strResult = UploadImage(FileUpload1, "产品名称");
if(strResult == "success")
{
divWkProductList.Visible = true;
divWkProductList1.Visible = true;
divWkUploadQrCode.Visible = false;
}
else
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "js", "<script>alert('上传图片出错,请截图后发送给公众号。错误原因:" + strResult + "');</script>");
}
}
else
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "js", "<script>alert('您尚未选择图片,请先选择再提交');</script>");
}
}

protected string UploadImage(FileUpload oFiles, string product_name)
{
byte[] b = new byte[oFiles.PostedFile.ContentLength];
System.IO.Stream fs = oFiles.FileContent;
fs.Read(b, 0, oFiles.PostedFile.ContentLength);
string postData = "data=" + HttpUtility.UrlEncode(Convert.ToBase64String(b));
var webclient = new WebClient();
webclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
byte[] buffer = webclient.UploadData("http://文件服务器网址/UploadImage.ashx", "POST", byteArray);
var msg = Encoding.UTF8.GetString(buffer);

JObject obj = (JObject)JsonConvert.DeserializeObject(HttpUtility.UrlDecode(msg));
if(obj["code"].ToString().Replace("\"", "") == "success")
{
string filename = obj["file_name"].ToString().Replace("\"", "");
//此处可放入你的数据库记录增加段落
return "success";
}
else
{
return obj["code"].ToString().Replace("\"", "");
}

}


文件服务器上的核心代码:

UploadImage.ashx

<% @ webhandler language="C#" class="UploadImage" %>
using System;
using System.IO;
using System.Net;
using System.Web;


public class UploadImage : IHttpHandler
{


public void ProcessRequest(HttpContext context)
{
string msg = "";
byte[] filedata = Convert.FromBase64String(context.Request["data"]);
if (filedata.Length == 0)
{
    msg= "{\"code\":\"上传的是空文件\"}";
}
if (filedata.Length > 8194304)
{
    msg = "{\"code\":\"图片大小不能超过4M\"}";
}
//context.Response.Write("1");
//context.Response.End();

string fileextension = filedata[0].ToString() + filedata[1].ToString();
if (fileextension == "7173")
{
    fileextension = "gif";
}
else if (fileextension == "255216")
{
    fileextension = "jpg";
}
else if (fileextension == "13780")
{
    fileextension = "png";
}
else if (fileextension == "6677")
{
    fileextension = "bmp";
}
else if (fileextension == "7373")
{
    fileextension = "tif";
}
else
{
    msg = "{\"code\":\"上传的文件不是图片\"}";
fileextension = "png";
}
try
{
//保存图片
string filename = Guid.NewGuid().ToString("D").Replace("-", "") + "." + fileextension;  //DateTime.Now.ToString("yyyyMMddHHmmss")
System.IO.MemoryStream ms = new System.IO.MemoryStream(filedata);
System.IO.FileStream fs = new System.IO.FileStream(context.Server.MapPath("~/") + "/ImagesQrCode/" + filename, System.IO.FileMode.Create);
ms.WriteTo(fs);
ms.Close();
fs.Close();
fs = null;
ms = null;
msg = "{\"code\":\"success\",\"file_name\":\"" + filename + "\"}";
}
catch (Exception exe)
{
    msg = "{\"code\":\"" + exe.Message + "\"}";
}

context.Response.Write(msg);

}


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乱世刀疤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值