我想使用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);
}
希望这很清楚
答案 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>
最重要的是,你可以做很多jquery(或在互联网上获取脚本),允许拖放和其他很好的东西 - 比如删除多个文件并逐个上传它们作为单独的请求,视觉反馈。