.net实现文件上传到服务器

.net实现文件上传到服务器,第1张

1、前端界面十分简单,只是放一个file类型的和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:

<input id="UpLoad" runat="server" type="file">

</asp:button>

2、后台编写上传按钮点击事件UpLoad_Click里的代码,先大体说一下思路:

根据file类型的控件获得将要上传文件在本机的物理路径

在这个物理路径中用截取字符串的方法获得文件名(第一步中取得的路径为本机的绝对路径,在服务器上是无效的,所以这里只需要获取文件名);

利用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)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10057710.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存