using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Net;
public partial class activeuploadfile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string _fileNamePath = "";
_fileNamePath = Request.QueryString["upfile"].ToString();
_fileNamePath = Server.UrlDecode(_fileNamePath);
//开始上传
string _savedFileResult = UpLoadFile(_fileNamePath);
Response.Write(_savedFileResult);
Response.End();
}
protected string UpLoadFile(string fileNamePath)
{
int dindex= fileNamePath.IndexOf('.');
string fileNameExt = fileNamePath.Substring(dindex, fileNamePath.Length - dindex);
//生成将要保存的随机文件名
string fileName = GetFileName() + fileNameExt;
//物理完整路径
string toFilePath = "~/UpFile/";
string rootFullPath = Server.MapPath(toFilePath);
//检查是否有该路径 没有就创建
if (!Directory.Exists(rootFullPath))
{
Directory.CreateDirectory(rootFullPath);
}
///创建WebClient实例
WebClient myWebClient = new WebClient();
//设定windows网络安全认证 方法1
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//要上传的文件
FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
//FileStream fs = OpenFile();
BinaryReader r = new BinaryReader(fs);
//使用UploadFile方法可以用下面的格式
byte[] postArray = r.ReadBytes((int)fs.Length);
string toFileFullPath = rootFullPath + fileName;
Stream postStream = myWebClient.OpenWrite(toFileFullPath, "PUT");
if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
}
postStream.Close();
fs.Close();
myWebClient.Dispose();
return toFileFullPath;
}
protected string GetFileName()
{
Random rd = new Random();
StringBuilder serial = new StringBuilder();
serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff"));
serial.Append(rd.Next(0, 999999).ToString());
return serial.ToString();
}
}
aspx:
<body>
<form id="form1" runat="server">
<div>
<input id="UpLoadFile" type="file" style="width:400px;" />
<input id="Button1" type="button" value="上传" onclick="javascript:reqUpLoad();"/>
</div>
</form>
<script language="javascript" type="text/javascript">
function reqUpLoad()
{
var upInupt = document.getElementById("UpLoadFile");
var url = "activeuploadfile.aspx?upfile=" + encodeURI(upInupt.value);
var reFilePath = RequestUrlAction(url);
document.getElementById("showImage").innerHTML = "<img src='"+reFilePath+"' />";
}
/获取远程数据(兼容多浏览器)
function RequestUrlAction(URL)
{
var xmlhttp = null;
if (URL.indexOf('?') == -1) {
URL = URL + "?randomid=" + Math.random();
}
else {
URL = URL + "&randomid=" + Math.random();
}
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest(); //火狐浏览器。
}
else if(window.ActiveXObject){
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); //IE浏览器。
if (!xmlhttp) {
xmlhttp = new ActiveXObject("Microsoft.XML" + "HTTP");
}
}
if(xmlhttp)
{
xmlhttp.open("GET",URL, false); //加载url对应的远程服务器来处理我们提交的数据。
xmlhttp.send(null);
if(xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
return(xmlhttp.responseText);
}
}
delete(xmlhttp)
}
else
{
alert("对不起,您的浏览器不支持XMLHttpRequest组件,请上google搜索相关解决方案!")
}
}
</script>
<span id="showImage"></span>
</body>
这篇博客介绍了一个使用C#后端处理文件上传的实现方式,结合Ajax进行异步交互。通过创建WebClient实例,设置网络认证并读取文件流进行上传。在前端,利用JavaScript监听按钮点击事件,通过XMLHttpRequest发送GET请求到服务器,获取上传后的文件路径并显示图片。

604

被折叠的 条评论
为什么被折叠?



