asp.net mvc中上传图片立即显示怎么弄啊
在网上找了一个,可是根本就没有反应,不知道哪儿出错了,泪奔了,求教
UploadFile.ashx.cs 是在Controllers下的类
<script type="text/javascript">
//图片预览
$("#imgfile").uploadPreview(
{
imgDiv: "#imgDiv",
imgType: ["bmp", "gif", "png", "jpg"],
maxwidth: 250,
maxheight: 250
});
//上传图片
$("#btnUpload").click(function() {
$.post("Controllers/UploadFile.ashx", { upfile: getPath($("#imgfile")) }, function (json) {
//json.result为upload.ashx文件返回的值
alert(json.result);
},"json");
});
});
</script>
[code=HTML]
<input id="imgfile" type="file" />
<input type="button" id="btnUpload" value="上传图片" />
<div id="imgDiv" runat="server"></div> //显示预览图片
[/code]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class UploadFile : IHttpHandler
{
/// <summary>
/// 您将需要在您网站的 web.config 文件中配置此处理程序,
/// 并向 IIS 注册此处理程序,然后才能进行使用。有关详细信息,
/// 请参见下面的链接: http://go.microsoft.com/?linkid=8101007
/// </summary>
#region IHttpHandler Members
public void ProcessRequest(HttpContext context)
{
//在此写入您的处理程序实现。
//源图片路径
string _fileNamePath = "";
try
{
_fileNamePath = context.Request["upfile"].ToString();
string _savedFileResult = uploadFile(_fileNamePath); //开始上传
//把编译成的json格式返回到前台
context.Response.Write(uploadFileResult(_savedFileResult));
}
catch
{
}
}
private string uploadFile(string filenamePath)
{
//图片格式
string fileNameExit = filenamePath.Substring(filenamePath.IndexOf('.')).ToLower();
if (!checkfileExit(fileNameExit))
{
return "图片格式不正确";
}
//保存路径
string toFilePath = "../Content/UploadFiles/";
//物理完整路径
string toFileFullPath = HttpContext.Current.Server.MapPath(toFilePath);
//检查是否有该路径,没有就创建
if (!Directory.Exists(toFileFullPath))
{
Directory.CreateDirectory(toFileFullPath);
}
//生成将要保存的随机文件名
string toFileName = getFileName();
//将要保存的完整路径
string saveFile = toFileFullPath + toFileName + fileNameExit;
//创建WebClient实例
WebClient myWebClient = new WebClient();
//设定window网络安全认证
/*Credentials 属性包含的身份验证凭据用于访问主机上的资源。
* 在多数客户端方案中,应使用 DefaultCredentials,这是当前登录的用户的凭据。
* 为此,将 UseDefaultCredentials 属性设置为 true,而不是设置此属性。
* */
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//要上传的文件
FileStream fs = new FileStream(filenamePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
//使用UploadFile方法可以用下面的格式
//将本地文件发送到资源,并返回包含任何响应的 Byte 数组。
myWebClient.UploadFile(saveFile, filenamePath);
return "图片保存成功";
}
//把返回值编译成json格式
public string uploadFileResult(string result)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jswriter = new JsonTextWriter(sw))
{
jswriter.Formatting = Formatting.Indented;
jswriter.WriteStartObject();
jswriter.WritePropertyName("result");
jswriter.WriteValue(result);
jswriter.WriteEnd();
}
return sb.ToString();
}
/// <summary>
/// 检查图片格式
/// </summary>
/// <param name="_fileExit">文件后缀名</param>
/// <returns></returns>
private bool checkfileExit(string _fileExit)
{
string[] allowExit = new string[] { ".gif", ".jpg", ".png" };//判断文件类型
for (int i = 0; i < allowExit.Length; i++)
{
if (allowExit[i] == _fileExit)
{
//符合文件类型则返回true;
return true;
}
}
return false;
}
/// <summary>
/// 得到随机的文件名
/// </summary>
/// <returns></returns>
public static string getFileName()
{
Random rd = new Random();
StringBuilder serial = new StringBuilder();
serial.Append(DateTime.Now.ToString("yyMMddHHmmssff"));
serial.Append(rd.Next(0, 9999).ToString());
return serial.ToString();
}
public bool IsReusable
{
// 如果无法为其他请求重用托管处理程序,则返回 false。
// 如果按请求保留某些状态信息,则通常这将为 false。
get
{
return false;
}
}
#endregion
}
[解决办法]
图片上传