【发布时间】:2019-02-02 12:30:15
【问题描述】:
我需要你的帮助。我已经编写了一个代码来更新我在表单视图中的图像。一切正常。但是,当立即从计算机中的任何其他位置上传图像时,我单击更新我收到一条错误消息:找不到文件'C:\Program Files\IIS Express\FariPassport.jpg'。
这是我的 aspx 页面:
<tr style="align-content:center">
<%--<th>Passport:
</th>--%>
<td>
<asp:Image ID="imgPicture" runat="server" ImageUrl='<%# Eval("ID","ShowImage.ashx?ID={0}") %>' Width="128px" Height="128px" />
</tr>
</td>
</tr>
<tr>
<td align="center">
<asp:Button ID="Button1" runat="server" Text="Edit" CommandName="Edit" CssClass="btn-danger" Font-Size="Large" Height="30px" Width="82px" />
<%--<asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit" Text="Edit" CssClass="btn-link" />--%>
</td>
<%--<td align="center">
<asp:LinkButton ID="lnkDelete" runat="server" CommandName="Delete" Text="Delete"
OnClientClick="return confirm('Are you sure to delete it completely?');" />
</td>--%>
<%--<td align="center">
<asp:LinkButton ID="lnkNew" runat="server" CommandName="New" Text="New" />
</td>--%>
</tr>
</table>
</ItemTemplate>
<EditItemTemplate>
<table width="100%" bgcolor="#FFCC00">
<tr>
<th> </th>
<td>
<asp:FileUpload ID="fupEditImage" runat="server" />
<asp:CustomValidator ID="cmvImageType" runat="server" ControlToValidate="fupEditImage"
ErrorMessage="File is invalid!" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
</td>
</tr>
<tr>
<td align="center">
<asp:LinkButton ID="lnkUpdate" runat="server" CommandName="Update" Text="Update" ForeColor="White" />
</td>
<td align="center">
<asp:LinkButton ID="lnkCancel" runat="server" CommandName="Cancel" Text="Cancel"
CausesValidation="False" ForeColor="White" />
</td>
</tr>
</table>
</EditItemTemplate>
<EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<InsertItemTemplate>
<table width="100%">
<tr>
<th>Passport:
</th>
<td>
<asp:FileUpload ID="fupInsertImage" runat="server" />
<asp:CustomValidator ID="cmvImageType" runat="server" ControlToValidate="fupInsertImage"
ErrorMessage="File is invalid!" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
</td>
</tr>
<tr>
<td align="center">
<asp:LinkButton ID="lnkInsert" runat="server" CommandName="Insert" Text="Insert" />
</td>
<td align="center">
<asp:LinkButton ID="lnkInsertCancel" runat="server" CommandName="Cancel" Text="Cancel"
CausesValidation="False" />
</td>
</tr>
</table>
</InsertItemTemplate>
<PagerStyle HorizontalAlign="Center" ForeColor="#8C4510" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
</asp:FormView>
<asp:SqlDataSource ID="SqlDSPersonDetails" runat="server" ConnectionString="<%$ ConnectionStrings:NNPC-ChevronScholarshipConnectionString %>" SelectCommand="SELECT [ID], [PassportFileName], [PassportImageType], [Passport] FROM [Candidates] WHERE ([UserId] = @UserId)"
DeleteCommand="DELETE FROM Candidates WHERE (ID = @ID)" InsertCommand="INSERT INTO tb_personInfo(PassportFileName, Passport, PassportImageType) VALUES (@PassportFileName, @Passport, @PassportImageType)"
UpdateCommand="UPDATE Candidates SET PassportImageType = @PassportImageType, Passport = @Passport WHERE (ID = @ID)" OnSelecting="SqlDSPersonDetails_Selecting">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="PassportFileName" Type="String" />
<asp:Parameter Name="Passport" DbType="Binary" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="PassportImageType" Type="String" ConvertEmptyStringToNull="true" />
</InsertParameters>
<SelectParameters>
<asp:Parameter Name="UserId" Type="Object" />
</SelectParameters>
<UpdateParameters>
<%--<asp:Parameter Name="PassportFileName" Type="String" />--%>
<asp:Parameter Name="PassportImageType" Type="String" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Passport" DbType="Binary" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="ID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
</div>
Below is my line of code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.IO;
using System.Web.Security;
public partial class ORMApp_PassportUpdate : System.Web.UI.Page
{
// Static types of common images for checking.
private static List<string> imgytpes = new List<string>()
{
".BMP",".GIF",".JPG",".PNG"
};
protected void Page_Load(object sender, EventArgs e)
{
}
protected void SqlDSPersonDetails_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
// Get a reference to the currently logged on user
MembershipUser currentUser = Membership.GetUser();
// Determine the currently logged on user's UserId value
Guid currentUserId = (Guid)currentUser.ProviderUserKey;
// Assign the currently logged on user's UserId to the @UserId parameter
e.Command.Parameters["@UserId"].Value = currentUserId;
}
protected void fvPersonDetails_ItemInserting(object sender, FormViewInsertEventArgs e)
{
}
protected void fvPersonDetails_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
CustomValidator cv = fvPersonDetails.FindControl("cmvImageType") as CustomValidator;
cv.Validate();
e.Cancel = !cv.IsValid;
FileUpload fup = (FileUpload)fvPersonDetails.FindControl("fupEditImage");
if (cv.IsValid && fup.PostedFile.FileName.Trim() != "")
{
e.NewValues["Passport"] = File.ReadAllBytes(fup.PostedFile.FileName);
e.NewValues["PassportImageType"] = fup.PostedFile.ContentType;
}
}
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (args.Value != null && args.Value != "")
{
args.IsValid = imgytpes.IndexOf(System.IO.Path.GetExtension(args.Value).ToUpper()) >= 0;
}
}
protected void fvPersonDetails_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
}
protected void fvPersonDetails_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
}
protected void fvPersonDetails_ItemDeleted(object sender, FormViewDeletedEventArgs e)
{
}
protected void fvPersonDetails_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
}
protected void fvPersonDetails_ModeChanging(object sender, FormViewModeEventArgs e)
}
}
【问题讨论】:
-
哪一行抛出错误?听起来您应该使用虚拟路径而不是上传文件的物理路径。
-
@TetsuyaYamamoto,感谢您的回复。这是第 58 行:e.NewValues["Passport"] = File.ReadAllBytes(fup.PostedFile.FileName);。除了我把图像放在 IISExpress 文件夹中,这不是我想要的。每当我从另一个位置尝试时,我都会收到错误消息 - “/”应用程序中的服务器错误。找不到文件“C:\Program Files\IIS Express\DivinePass.jpg”。
标签: c# asp.net sql-server image file-upload