将驻留在客户端设备上的映像保存到服务器上的数据库

时间:2014-02-19 09:17:44

标签: c# asp.net database image

我想使用ASP.NET执行一个简单的操作。我希望用户根据需要选择尽可能多的图像,并将这些图像保存到服务器上运行的数据库中。每次用户想要添加新图像时,他都会点击“添加”来添加新图像。图像具有附带的属性,例如拍摄位置和拍摄时间。该位置通过文本框输入,日期通过日期选择器输入。

问题在于将图像保存到服务器。

是否有任何控制来执行此任务?

我尝试过使用上传控件和Devexpress ASPxUpload控件,但无济于事。上传控件还要求我先将图像上传到服务器,然后再将其保存到数据库中。

我尝试实现控件,该控件代表图像及其日期和位置作为用户控件,但每当我点击上传按钮时,事件都不会被调用

以下是用户控件的代码

    public partial class ucVerificationItem : System.Web.UI.UserControl
{
    public byte[] data { set; get; }
    public byte[] Photo { get { return data; } }
    //ASPxFormLayout1_E3.Text is a Text Box which has the verification text
    public string Verify { get { return ASPxFormLayout1_E3.Text; } }
    //ASPxFormLayout1_E4.Text is a Text Box which has the caption text
    public string Caption { get { return ASPxFormLayout1_E4.Text; } }
    //ASPxFormLayout1_E5.Date is a DateEdit which has the date
    public DateTime Date { get { return ASPxFormLayout1_E5.Date; } }

    // to expose the button to the page from which it is gonna be called
    public ASPxButton Button { get { return ASPxButton1; } }
    //to expose the uplaod control
    public ASPxUploadControl UploadControl { get { return ASPxFormLayout1_E2; } }

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void ASPxButton1_Click(object sender, EventArgs e)
    {
        ASPxFormLayout1_E2.UploadedFiles[0].SaveAs(Server.MapPath("~\\temp\\"+ASPxFormLayout1_E2.UploadedFiles[0].FileName));
    }

    protected void ASPxFormLayout1_E2_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
    {
        ASPxFormLayout1_E2.UploadedFiles[0].PostedFile.InputStream.Read(data, 0, ASPxFormLayout1_E2.PostedFile.ContentLength);
    }
}

以下是调用控件的页面代码

        protected void Page_Init(object sender, EventArgs e) {
        if (IsPostBack)
        {
            if (Session["Photos"] == null)
            {
                List<ucVerificationItem> list = new List<ucVerificationItem>();
                Session["Photos"] = list;
            }
            foreach (ucVerificationItem item in Session["Photos"] as List<ucVerificationItem>)
            {
                PlaceHolder1.Controls.Add(item);
            }
        }       
    }

        protected void addPhotoASPxButton_Click(object sender, EventArgs e)
    {
        ucVerificationItem item = (ucVerificationItem)Page.LoadControl("~/Company/Forms/ucVerificationItem.ascx");
        (Session["Photos"] as List<ucVerificationItem>).Add(item);
        PlaceHolder1.Controls.Add(item);
    }

希望这很清楚

1 个答案:

答案 0 :(得分:1)

  

通过文本框输入位置

没有。服务器无法访问该位置,特别是如果它被编码为来自客户端的本地路径(即C:\ blablabla)

使用FIleUploadControl并将二进制数据作为请求的一部分发送到服务器。

除了有许多方法可以使jquery等更好用之外,bsi文件上传是HTML的核心部分,你应该在阅读一些HTML文档时了解它。

http://webdesign.about.com/od/htmltags/p/input-file-tag.htm

谈论它。

核心语法是:

<form enctype="multipart/form-data">
<input type="file" accept="image/jpg,image/gif">
</form>
  • 你必须将enctype作为multipart,否则无法发送二进制数据,它必须是POST - 没有GET请求。
  • 输入类型=文件是浏览器知道它应该发布fike的方式。

最重要的是,你可以做很多jquery(或在互联网上获取脚本),允许拖放和其他很好的东西 - 比如删除多个文件并逐个上传它们作为单独的请求,视觉反馈。