我在asp.net中有一个fileupload控件,用于上传图像。我想在asp.net的image
控件中显示预览图像。这是aspx代码
ASPX
<script type="text/javascript">
function FU_Img_onchange(oFU_Img) {
alert("sak");
var img = document.getElementById("<%= Btn_Preview.ClientID%>");
img.click();
}
function FU_Video_onchange(oFU_Vid) {
var vid = document.getElementById("<%= VidPreview.ClientID %>");
vid.click();
}
</script>
C#代码
protected void Btn_Preview_Click(object sender, EventArgs e)
{
try
{
if (FU_Img.HasFile)
{
string path = Server.MapPath("/TempImages");
FileInfo oFileInfo = new FileInfo(FU_Img.PostedFile.FileName);
string fileName = oFileInfo.Name;
string fullFileName = path + "//" + fileName;
string imagePath = "/TempImages/" + fileName;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
Session["FileUpload"] = FU_Img;
FU_Img.PostedFile.SaveAs(fullFileName);
Img_Prof.ImageUrl = imagePath;
}
}
catch (Exception ex)
{
using (StreamWriter sw = new StreamWriter("/log.txt"))
{
sw.NewLine = DateTime.Now.ToString() + "--->>" + ex.ToString() + "\n" + ex.StackTrace.ToString();
}
}
}
正如您所看到的,我正在将我的图像控件放入会话中。它在开发服务器上工作正常。当我将网站发布到域名时,我得到了问题
Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
堆栈跟踪
[SerializationException: Type 'System.Web.UI.WebControls.FileUpload' in Assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7738443
System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +258
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +111
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +422
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +51
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +410
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +134
System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1577
[HttpException (0x80004005): Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.]
System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1662
System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34
System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +606
System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +239
System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length) +72
System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +87
System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +560
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75`
我确信fileupload控件和会话有问题。但请指导正确的方向我该怎么办? 提前谢谢
答案 0 :(得分:2)
通过查看异常,可能会将SessionMode设置为SQLServer或StateServer,将其更改为InProc并查看其是否有效。如果它的工作意味着您的会话持续到后端存储不起作用,那么请检查或发布代码,以便我们可以更深入地了解问题。