
1、前端界面十分简单,只是放一个file类型的和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:
<input id="UpLoad" runat="server" type="file"></asp:button>
2、后台编写上传按钮点击事件UpLoad_Click里的代码,先大体说一下思路:
在这个物理路径中用截取字符串的方法获得文件名(第一步中取得的路径为本机的绝对路径,在服务器上是无效的,所以这里只需要获取文件名);
利用file类型的控件属性PostedFile的SaveAs()方法将相应文件存储到服务器中指定的文件夹中。
3、后台核心代码:
protected void btnUpLoad_Click(object sender, EventArgs e){
//取出所选文件的本地路径
string fullFileName = this.UpLoad.PostedFile.FileName
//从路径中截取出文件名
string fileName = fullFileName.Substring(fullFileName.LastIndexOf(\) + 1)
//限定上传文件的格式
string type = fullFileName.Substring(fullFileName.LastIndexOf(.) + 1)
if (type == doc || type == docx || type == xls || type == xlsx || type == ppt || type == pptx || type == pdf || type == jpg || type == bmp || type == gif || type == png || type == txt || type == zip || type == rar)
{
//将文件保存在服务器中根目录下的files文件夹中
string saveFileName = Server.MapPath(/files) + \ + fileName
UpLoad.PostedFile.SaveAs(saveFileName)
Page.ClientScript.RegisterStartupScript(Page.GetType(), message, <script language='javascript' defer>alert('文件上传成功!')</script>)
//向数据库中存储相应通知的附件的目录
BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL()
AnnexEntity annex=new AnnexEntity() //创建附件的实体
annex.AnnexName=fileName //附件名
annex.AnnexContent=saveFileName //附件的存储路径
annex.NoticeId = noticeId //附件所属“通知”的ID在这里为已知
insertAnnex.InsertAnnex(annex) //将实体存入数据库(其实就是讲实体的这些属性insert到数据库中的过程,具体BLL层和DAL层的代码这里不再多说)
}
else
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), message, <script language='javascript' defer>alert('请选择正确的格式')</script>)
}
}
问题是出在你做 btnFileUpload_Click事件时页面刷新过一次,应该是在你调用这个方法之前。你仔细看一下有没有别的控件在 *** 作的时候刷新过页面。比如DropDownList等。还有就是 if (!IsPostBack)别忘了加,希望对你有帮助Response.Write("<script>alert('请选择您要上传的文件!')</script>")
这就说明你的文件是没有选择上的, 这种情况只有两种可能,1.你根本就没选。2.你选择完,页面再次刷新。当然第一种是不会的,那么就是第二种了。如果你没有写if (!IsPostBack)服务器控件在回访的时候页面会再次刷新,你刚才所添的内容以及所选的图片路径都会清空,所以FileUpLoad .HasFile 找不到图片。
图片保存到数据库不是最佳的选择.你可以搜索一下Uploadify 插件. 这个插件非常好用
一般将图片存为图片文件.
大致代码如下:
$("#btn_upload_attachment").uploadify({
height: 25,
swf: '../Scripts/plugin/uplodify/uploadify.swf',
uploader: '/Home/Upload',
queueSizeLimit: 1,
formData: { ID: newId },
buttonText: '选择文件',
width: 80,
onUploadSuccess: function (file, data, response) {
eval("data=" + data)
AddToAttachmentList(data.Data)
}
})
后台代码处理:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Upload(HttpPostedFileBase fileData, Guid? ID)
{
if (fileData != null)
{
try
{
// 文件上传后的保存路径
var filePath = Path.Combine(ConfigurationManager.AppSettings["BusinessFiles"], Ticket.OrgId.ToString())
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath)
}
var fileName = Path.GetFileName(fileData.FileName)// 原始文件名称
var fileExtension = Path.GetExtension(fileName)// 文件扩展名
var fileID = Guid.NewGuid()
var saveName = fileID.ToString() + fileExtension// 保存文件名称
fileData.SaveAs(filePath + "/" + saveName)
// 作为临时附件存入附件表
var attachments = new Attachments()
attachments.ID = fileID
attachments.OrgID = Ticket.OrgId
attachments.BusinessType = (byte)BusinessType.TransferContract
attachments.Status = (byte)AttachmentStatus.Temp
if (ID.HasValue)
{
attachments.BusinessID = ID.Value
}
attachments.Extension = fileExtension
attachments.Name = fileName
attachments.Size = fileData.ContentLength
attachments.UploadTime = GetNow()
attachments.UploadBy = Ticket.EmployeeName
attachments.UploadByID = Ticket.UserId
AttachmentsBLL.SaveAttachment(attachments)
return Json(new { Success = true, FileName = fileName, SaveName = saveName, FileID = fileID, Data = attachments })
}
catch (Exception ex)
{
return Json(new { Success = false, Message = ex.Message }, JsonRequestBehavior.AllowGet)
}
}
else
{
return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)