我正在使用Upload Control FileUploadComplete事件将文档上传到临时文件夹,但我正在尝试监视临时文件夹中上传的内容,以便我可以在单击提交按钮时将其移动到真实的应用程序文件夹中。
我会上传我的代码;希望其中一些是有用的,谢谢
//global list to store temp uploads
protected List<string> listTempImages = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
//.....
}
//upload to temp method
protected void ucUploadFile_FileUploadComplete(object sender, FileUploadCompleteEventArgs e)
{
e.CallbackData = SavePostedFiles(e.UploadedFile);
}
string SavePostedFiles(UploadedFile uploadedFile)
{
if (!uploadedFile.IsValid)
{
return string.Empty;
}
string strAttachmentFolderQuery = "CALL storedProcedure"; //
DataTable dtFolderLocation = new DataTable();
BasicUtilities.SelectCommand(ref strAttachmentFolderQuery, ref dtFolderLocation, sqlConn, true);
string strFolderLocation = @dtFolderLocation.Rows[0]["ColumnName"].ToString();
string strCallFolder = strFolderLocation + @"Temp\\";
/** File doesn't exists, create folder and copy in new file */
listTempImages.AddRange(uploadedFile.FileName.Split('.'));
string strFileName = listTempImages[0];
FileInfo fi = new FileInfo(strFileName);
String timeStamp;
timeStamp = DateTime.Now.ToString("yyyMMddhhmmss");
string fullFileName = MapPath(strFolderLocation) + fi.Name;
ucUploadFile.SaveAs(strCallFolder + fi.Name + "_" + timeStamp + "." + listTempImages[1]);
//file_name_uploadTimeStamp.extention
string fileLabel = fi.Name;
string fileLength = uploadedFile.FileContent.Length / 1024 + "k";
/** adding image to temp to ensure you can get it or delete it */
listTempImages.Add(strCallFolder + fi.Name + "_" + timeStamp);
return string.Format("{0} ({1})|{2}", fileLabel, fileLength, fi.Name);
}
protected void btnSubmit_Click1(object sender, EventArgs e)
{
if (listTempImages != null)
{
/** Upload attachment to server */
while (listTempImages.Count >0)
{
Upload(callID, reporterID);
}
}
else
{
/** Upload panel doesn't have have a file */
}
}
**编辑
<dx:ASPxButton ID="btnSubmit" runat="server" Text="Submit"
ClientIDMode="AutoID"
onclick="btnSubmit_Click1" AutoPostBack="False">
<ClientSideEvents Click="function(s, e) {
if(document.getElementById('ucUploadFile_Input_0') == null){
e.processonserver = false;
$('#ucUploadFile_Add').click();
e.processonserver = true;
}
}" />
</dx:ASPxButton>
答案 0 :(得分:2)
HTTP是无状态协议,并且在回发之间不保留全局变量。您可以在ViewState中存储需要保留在postback
中的数据。如果数据不小,最好将其存储在某些持久性介质(如XML /数据库)中,以使ViewState尽可能小,因为它最终会添加到页面大小。
ViewState["listTempImages"] = listTempImages;
稍后通过ViewState
listTempImages = ViewState["listTempImages"] as List<string>;
在计算中,无状态协议是一种通信协议 将每个请求视为与之无关的独立事务 任何先前的请求,以便通信包括独立的 一对请求和响应。无状态协议不需要 服务器保留会话信息或每个的状态 通信伙伴在多个请求期间。在 相反,需要保持内部状态的协议是 称为有状态协议。要阅读更多关于国家的信息,请看这个 维基百科article
视图状态是ASP.NET页面框架使用的方法 在往返之间保留页面和控制值。当HTML 呈现页面的标记,页面的当前状态和 在回发期间必须保留的值被序列化 base64编码的字符串。然后将此信息放入视图中 州隐藏字段,MSDN
答案 1 :(得分:1)
正如Adil所说,HTTP是无国籍的。每次请求进入服务器时,您都会获得一个刷新页面 如果viewstate没有完成您的工作,您可以将数据存储在会话中。但要避免在会话或视图状态中保存大量数据。如果您要存储大量数据,那么使用xml来存储数据。使用xml的好处是
- 非常轻盈
- 最快的旅行数据方法
- 许可证独立
这里有一些国家管理的墨水 参考state management 和State Management in ASP.NET