1

フォームで使用した画像ファイルをアップロードしています<input type="file" name="browse_file" accept="image/*"/>

データ型でcovers呼び出される列を持つというテーブルがあります。これは私のhtmlがどのように見えるかですimgimage

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。、、などc_nameのすべての列が、列を除いてデータベーステーブルで更新されているため、接続は機能しています。categorydate_uplcoversimg

イメージパスを使用していません。rs("img") = request.Form("browse_file")データベース列を更新するための間違ったaspレコードセットはありますか?

4

1 に答える 1

3

SQL ImageDatataypeを使用している場合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
于 2012-09-14T09:29:18.713 に答える