【问题标题】:How do I store image in SQL Server database using Classic ASP.?如何使用 Classic ASP 将图像存储在 SQL Server 数据库中?
【发布时间】:2012-09-07 08:12:11
【问题描述】:

我正在上传一个图片文件,为此我在表单中使用了<input type="file" name="browse_file" accept="image/*"/>

我有一个名为covers 的表,其中有一列名为img,数据类型为image。 这就是我的 html 的样子

HTML

<table border="1" cellpadding="5" cellspacing="0" width="100%">
                <tr>
                    <td width="20%"><b>Choose Cover:</b></td>
                    <td>
                        <input type="file" name="browse_file"  accept="image/*"/>
                        <%
                            session("file_name") = request.Form("browse_file")
                        %>
                    </td>
                </tr>
                <tr>
                    <td><strong>Cover Name:</strong></td>
                    <td><input type="text" name="cover_name" value=""></td>
                </tr>
                <tr>
                    <td><strong>Choose Category:</strong></td>
                    <td>
                        <select name="disp_cat" onchange="return refresh_cat();">
                            <option selected="selected" value="0">Choose Category...</option>                           
                            <%
                                sql = "SELECT * from categories"
                                rs.open sql, con, 1, 2
                                do while not rs.eof
                            %>
                            <% if rs("name") = request.Form("disp_cat") then%>
                            <option value="<%=rs("name")%>" selected="selected"><%=rs("name")%></option>
                            <%else%>
                            <option value="<%=rs("name")%>"><%=rs("name")%></option>
                            <%end if
                                rs.movenext
                                loop
                                rs.close
                            %>
                        </select>
                    </td>
                </tr>
                <tr>    
                    <td colspan="2">
                        <input type="submit" value="Save" name="save_cover" onclick="return show_alert2();"/>
                        <input type="submit" value="Cancel" name="cancel" onclick="return go_back();"/>
                    </td>
                </tr>
                <%
                    if request.Form("save_cover") <> "" then
                    sql = "SELECT * from covers"
                    rs.open sql, con, 1, 2
                    rs.addnew

                    rs("c_name") = request.Form("cover_name")
                    rs("category") = request.Form("disp_cat")
                    rs("img") = request.Form("browse_file")
                    rs("date_upl") = date()

                    rs.update

                    response.Write("<script language='javascript'>{update1();}</script>")

                    rs.close
                    end if
                %>
                </table>

与数据库的连接在名为database.asp 的单独文件中定义。连接正常,因为除了img 列之外,数据库表covers 中的所有列(如c_namecategorydate_upl)都在更新。

它没有占用图像路径。 rs("img") = request.Form("browse_file") 是不是一个错误的asp记录集来更新数据库列?

【问题讨论】:

    标签: sql asp-classic sql-server-2000 record recordset


    【解决方案1】:

    如果您使用 SQL Image Datataype,则使用 binary field 来存储图像本身,而不是路径 - 如果您只想存储路径,则可以使用 varchar 数据类型。

    如果您想将图像存储在数据库中(作为二进制文件),那么最简单的方法是将文件保存到磁盘(使用FreeASPUpload 等),然后告诉 SQL 将该文件加载到二进制列中,例如:

    INSERT INTO covers(img)  
        SELECT * FROM   
        OPENROWSET(BULK N'c:\uplaods\img0001.jpg', SINGLE_BLOB) AS import  
    

    或者,如果您想插入表单数据,然后将图像上传到 SQL:

    UPDATE covers SET [img] = (SELECT NewImage.* from Openrowset(Bulk 'c:\uplaods\img0001.jpg', Single_Blob) NewImage) where Id = 10
    

    个人虽然 - 我不将图像存储在 SQL 中,我将它们保存在磁盘上并将文件名存储在 SQL 中,例如:

    function SaveFiles
        Dim Upload, fileName, fileSize, ks, i, fileKey
    
        Set Upload = New FreeASPUpload
        Upload.Save(uploadsDirVar)
        If Err.Number <> 0 then Exit function
        SaveFiles = ""
        ks = Upload.UploadedFiles.keys
        if (UBound(ks) <> -1) then
            SaveFiles = "<B>The following was uploaded:</B> "
            for each fileKey in Upload.UploadedFiles.keys
                SaveFiles = SaveFiles & Upload.UploadedFiles(fileKey).FileName & " (" & Upload.UploadedFiles(fileKey).Length & "B) "
    
                Dim cover_name, disp_cat
                cover_name = Upload.Form("cover_name")
                disp_cat = Upload.Form("disp_cat")
    
                '#### Double Up any quotes (very lazy - use paramaterised SQL instead)
                cover_name = replace(cover_name, "'", "''")
                disp_cat = replace(disp_cat, "'", "''")
    
                'Dump file information into database
                SQLnewFile = "INSERT into covers (File_Filename, cover_name, disp_cat) " & _
                             "VALUES ('" & replace(Upload.UploadedFiles(fileKey).FileName,"'","''") & "', '" & cover_name & "', '" & disp_cat & "')"              
                db.Execute(SQLnewFile)
            next
        else
            SaveFiles = "The file name specified in the upload form does not correspond to a valid file in the system."
        end if
    end function
    

    编辑 1:回应您的评论

    我通常不为他们编写人们的代码,但您似乎很难掌握这里的基础知识,不,您不会编辑您的 .inc 文件。您要编辑的代码是您检查帖子并插入数据的代码,例如:

    if request.Form("save_cover") <> "" then
        Dim Upload, fileName, ks, fileKey, uploadsDirVar
        uploadsDirVar = "c:\Uploads\"
    
        Set Upload = New FreeASPUpload
        Upload.Save(uploadsDirVar)
        ks = Upload.UploadedFiles.keys
        if (UBound(ks) <> -1) then
            for each fileKey in Upload.UploadedFiles.keys
                Dim cover_name, disp_cat
                cover_name  = replace(Upload.Form("cover_name"), "'", "''")
                disp_cat    = replace(Upload.Form("disp_cat"), "'", "''")
    
                SqlNewCover = "INSERT into covers (cover_name, disp_cat, FileName, img) " & _
                             "VALUES ('" & cover_name & "', '" & disp_cat & "', '" & replace(Upload.UploadedFiles(fileKey).FileName,"'","''") & "', (SELECT BulkColumn FROM OPENROWSET( Bulk '" & uploadsDirVar & replace(Upload.UploadedFiles(fileKey).FileName,"'","''") & "', SINGLE_BLOB) AS BLOB))"              
                db.Execute(SQLnewFile)
            next
        end if
    end if
    

    【讨论】:

    • 是 BLOB 存在于 Sql server 2000 中。因为我使用的是 sql Server 2000。我尝试使用 imagenvarchar二进制,但到目前为止还没有运气。
    • 是的,所有这些基于 blob 的数据类型都存在于 SQL 2000 中——但这不是您的问题吗?您的问题表明您正在尝试将图像路径存储在数据库中 - 而不是图像本身?我的 asp 示例展示了如何将图像保存到磁盘并将文件名存储在 SQL 中 - 即存储到 varchar 列。
    • 我可以将图像路径保存在我的数据库中,我想现在将图像保存在数据库中。有没有办法使用经典的 asp 和 SQL SERVER 2000..??..
    • 是的,在我的回答中使用 OpenRowSet(Bulk, 'Path', Single_Blob) 示例 - 但您仍然需要先将图像保存到磁盘,并注意使用的路径来自 SQL Server观点。
    • 再次,我在我的回答中链接了它:freeaspupload.net - 下载 freeASPUpload.asp 文件并包含在您的脚本中:&lt;!--#include file="freeASPUpload.asp"--&gt;
    猜你喜欢
    • 2014-05-31
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多