使用asp经典,使用唯一名称或id保存db中的文件

时间:2012-01-16 12:45:17

标签: asp-classic

我是新手,我的代码工作得非常好,但是我遇到了两个问题,尽管这些问题不会影响应用程序。我只想在逻辑上为应用程序提供良好的功能。

当我上传excel文件时,如果已经存在同名文件,我会覆盖它;如果我手动更改文件名,则以新名称保存文件。

我想做的是:

  1. 使用唯一名称或新名称保存此新文件,我不知道如何执行此操作。

  2. 使用登录用户信息将此文件保存在数据库中(供将来参考)

  3. 我希望我的问题能够得到解决。非常感谢

    this is the url from which I got help..

    CODE

    upload_excel.asp

    < form action="upload_excel_process.asp" method="post" enctype="multipart/form-data" name="frmMain" onSubmit="return checkData();" >
    <input name="file1" type="file"> <input type="submit" name="Submit" value="Submit">
    < %mem_id=session("mem_id")%>
    < input type="hidden" name="client_id"  value="<%=mem_id%>">
    < /form>
    

    upload_excel_process.asp

    <%client_id=session("mem_id")%>
    <% 
    Dim xlApp,xlBook,xlSheet1,xlSheet2,OpenFile,i
    Dim Conn,strSQL,client_id,objExec
    Dim mySmartUpload
    Dim sFileName
    
    Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
    
    mySmartUpload.Upload
    
    sFileName = mySmartUpload.Files("file1").FileName
    
    If sFileName <> "" Then
    
        mySmartUpload.Files("file1").SaveAs(Server.MapPath("excel/"&sFileName))
    
        OpenFile = "excel/"&sFileName
    
        Set xlApp = Server.CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(Server.MapPath(OpenFile))
        Set xlSheet1 = xlBook.Worksheets(1) 
    
        Set Conn = Server.Createobject("ADODB.Connection")
        Conn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("../db/database.mdb"),"" , ""
        For  i = 2 To 5  
            If Trim(xlSheet1.Cells.Item(i,1)) <> "" Then  
                strSQL = ""  <br>
                strSQL = strSQL &"INSERT INTO add_contacts "
                strSQL = strSQL &"(client_id,name_receiver,contact_person_receiver,street_receiver,city_receiver, tel_receiver,fax_receiver,country_receiver,zip_code_receiver) "
    
                > i have added fields to the db for file (file_name and file_id)
    
                strSQL = strSQL &"VALUES " 
                strSQL = strSQL &"('"&client_id&"', '"&xlSheet1.Cells.Item(i,1)&"','"&xlSheet1.Cells.Item(i,2)&"','"&xlSheet1.Cells.Item(i,3)  &"'"  
                strSQL = strSQL &",'"&xlSheet1.Cells.Item(i,4)&"','"&xlSheet1.Cells.Item(i,5)&"','"&xlSheet1.  Cells.Item(i,6)&"','"&xlSheet1.Cells.Item(i,7)&"','"&xlSheet1.Cells.Item(i,8)&"')"
    
                Set objExec = Conn.Execute(strSQL)
                Set objExec = Nothing
            End IF 
        Next
    
        xlApp.Application.Quit
    
        Conn.Close()
        Set Conn = Nothing
        Set xlSheet1 = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
    End If
    
    Set mySmartUpload = Nothing
    %>
    

2 个答案:

答案 0 :(得分:0)

exkersns cheking

如果您想检查文件名是否确实存在,则必须使用标准FileExists中的FilesystemObject方法(有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/x23stk5t(v=VS.85).aspx)。

那有什么必须做的?

If sFileName <> "" Then

 Dim fullFilePath = Server.MapPath("excel/"&sFileName)

 Dim fso
 Set fso = CreateObject("Scripting.FileSystemObject")
 If (fso.FileExists(filespec)) Then
    //Rem Whatever you want to do here
 End If

 mySmartUpload.Files("file1").SaveAs(fullFilePath) 

 and so far...

答案 1 :(得分:0)

如果我理解您的问题,您希望将文件名保存为唯一,以避免覆盖。

最好的方法是在保存之前检查文件是否存在于目标目录中。如果存在则通过附加一些唯一的ID来更改文件名,例如timestamp。

要保存文件,请使用 saveas 方法。

strFileName = PMSmartUpload.Files.Item(1).FileName
strFilePath = strFileDirectory & "\" & strFileName

    Set fso = CreateObject("Scripting.FileSystemObject")
    If (fso.FileExists(strFilePath)) Then
        ''rename suffix for file
        strDateExt = cstr(month(Date)) +cstr(day(Date))+cstr(year(Date)) +cstr(Hour(Now)) +cstr(Minute(Now)) +cstr(Second(Now))
        strFileExtension =fso.GetExtensionName(strFileName) 
        strFileBaseName = fso.GetBaseName(strFileName)       
        strFileName = strFileBaseName+"_"+ strDateExt +"."+strFileExtension
    End If 
    'response.write strFileDirectory&"\"&strFileName
    PMSmartUpload.Files.Item(1).saveas strFileDirectory&"\"&strFileName

简而言之,saveas方法将使用指定的名称(完整路径)保存已发布的文件