无法在数据库中保存图片

时间:2014-01-25 23:11:26

标签: c# asp.net sql sql-server

我正在尝试将数据上传到我的数据库,包括图片。除了图像之外的一切都很好。

我正在使用FileUpload组件:

<asp:FileUpload runat="server" ID="ImgFileUpload" />

这是我的C#代码:

protected void btnSave_Click(object sender, EventArgs e)
{
    if (ImgFileUpload.HasFile)
    {
        int length = ImgFileUpload.PostedFile.ContentLength;
        byte[] pic = new byte[length];

        ImgFileUpload.PostedFile.InputStream.Read(pic, 0, length);

        try
        {
            SqlConnection conn = new SqlConnection("Data Source=GAMINGSYSTEMS;Initial Catalog=MAIN;Integrated Security=True");
            SqlCommand com = new SqlCommand("insert into Personal " + "(Name, Job, Email, Picture) values (@Name, @Job, @Email, @Img)", conn);
            conn.Open();
            com.Parameters.AddWithValue("@Name", txtboxName.Text);
            com.Parameters.AddWithValue("@Job", txtboxEmail.Text);
            com.Parameters.AddWithValue("@Email", txtboxEmail.Text);
            com.Parameters.AddWithValue("@Img", pic);
            com.ExecuteNonQuery();
        }
        finally
        {
        }
    }
}

我的SQL Server数据库:因为除了图片以外的所有内容都可以告诉我们表格中的Image行:

Column Name: Picture .  Data Type: image  .   Allow Nulls: Allowed.

当我尝试上传图片时,我在图片中的所有内容都是这个()

因为我无法上传图片而出现了什么问题

3 个答案:

答案 0 :(得分:1)

您可能需要按照herehere所述重置搜索位置。您的代码可能如下所示:

int length = ImgFileUpload.PostedFile.ContentLength;
byte[] pic = new byte[length];
ImgFileUpload.PostedFile.InputStream.Seek(0, SeekOrigin.Begin); 

ImgFileUpload.PostedFile.InputStream.Read(pic, 0, length);

答案 1 :(得分:0)

我强烈建议您将列数据类型更改为长文本。

之后转换base64字符串中的字节数组

String imageString = Convert.ToBase64String(pic);

您可以选择在base64String之前添加“data:image / png; base64”,以便可以直接在html5中使用。

imageString = "data:image/png;base64," + imageString;

答案 2 :(得分:0)

我遇到过类似你之前的情况。

对于我的数据库,(我正在使用Microsoft Access 2010)对于图像列,我的所有图像都是路径〜Images2 / picture1.jpg。 Images2将是存储所有图片的文件夹。

对于VS Pro 2013 - 网格视图详细信息视图等,我将链接到数据库并添加一个Imagefield列并替换上一列(Boundfield)它将显示图像。

对于fileupload,这是我使用的代码,您可以将其用于引用。如果你想将文件链接存储到你的数据库,然后检索要显示在你的网站/应用程序中的图像,你只需将文件保存为“〜Images2 / picture1.jpg”,然后使用gridview等进行检索。希望它对你有帮助。

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            SaveFile(FileUpload1.PostedFile);
        }
        else
        {
            Label4.Text = "You did not specify a file to upload";
        }
    }
    void SaveFile(HttpPostedFile File)
    {
        string savePath = Server.MapPath("~/Images2/");
        string fileName = FileUpload1.FileName;
        string pathToCheck = savePath + fileName;
        string tempFileName = "";

        if (System.IO.File.Exists(pathToCheck))
        {
            int counter = 2;
            while (System.IO.File.Exists(pathToCheck))
            {
                tempFileName = counter.ToString() + fileName;
                pathToCheck = savePath + tempFileName;
                counter++;
            }

            fileName = tempFileName;

            // notify user that file name was changed
            Label4.Text = "A file name with the same name already exist, " +
                "<br />Your file was saved as " + fileName;
        }
        else
        {
            labelFileName.Text = fileName;
            LabelFileType.Text = FileUpload1.PostedFile.ContentType;
            LabelFileContentLength.Text = FileUpload1.PostedFile.ContentLength.ToString();
            Label4.Text = "Your file was uploaded successfully";
        }

        // Append the name of the file to upload to the path
        savePath += fileName;

        FileUpload1.SaveAs(savePath);

    }
}