Αυτήν τη στιγμή είστε εκτός σύνδεσης, σε αναμονή για επανασύνδεση στο Internet

Τρόπος αποστολής αρχείων σε ένα διακομιστή Web με τη χρήση ASP

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:299692
Για Microsoft Visual Basic.NET έκδοση αυτού του άρθρου, ανατρέξτε στο θέμα 315832.
Περίληψη
Αυτό το άρθρο περιγράφει τον τρόπο ενεργοποίησης διακομιστή Web για να λήψη μεταφορές αρχείων από σελίδες Microsoft Active Server Pages (ASP) με χρήση ένα διακομιστή Microsoft στοιχείο COM +.

back to the top

Απαιτήσεις

  1. Microsoft Windows 2000 με πληροφορίες για το Microsoft Internet Server (IIS) 5.0 εγκαθίσταται και ρυθμίζεται
  2. Εάν ο υπολογιστής ανάπτυξης είναι από διαφορετικό υπολογιστή στο διακομιστή, πρέπει να έχετε μια έγκυρη δικτύου ή Internet σύνδεση με το διακομιστή που φιλοξενεί τις σελίδες ASP.
Επιστροφή στην επάνω

Το πρόγραμμα εγκατάστασης του Microsoft Visual Basic 6 έργου και κώδικα

  1. Ξεκινήστε τη Visual Basic και στη συνέχεια ξεκινήστε μια νέα βιβλιοθήκη DLL ActiveX το έργο.
  2. Το όνομα του έργουASPFileUpload.
  3. Αλλαγή του ονόματος Class1 Για ναΤο αρχείο.
  4. Από το Έργο μενού, κάντε κλικ στο κουμπί Αναφορές.
  5. Με το Αναφορές στο παράθυρο διαλόγου, κάντε κλικ για να επιλέξετε τις ακόλουθες επιλογές και, στη συνέχεια, κάντε κλικ στο κουμπί OK:
    • Visual Basic For Applications
    • Αντικείμενα χρόνου εκτέλεσης Visual Basic και διαδικασίες
    • Αντικείμενα της Visual Basic και διαδικασίες
    • Αυτοματισμός OLE
    • Βιβλιοθήκη τύπων υπηρεσιών COM +
    • Βιβλιοθήκη αντικειμένων Microsoft ενεργές σελίδες διακομιστή
    • Χρόνος εκτέλεσης δέσμης ενεργειών της Microsoft
  6. Από το Έργο μενού, κάντε κλικ στο κουμπί ASPFileUpload ιδιότητες.
  7. Με το Ιδιότητες έργου στο παράθυρο διαλόγου, κάντε κλικ στην επιλογή Εκτέλεση χωρίς παρακολούθηση και Διατηρούνται στη μνήμη, και στη συνέχεια κάντε κλικ στο κουμπί OK.
  8. Επικολλήστε τον παρακάτω κώδικα στο File.cls:
    Option ExplicitConst ERR_INVALID_FILENAME = vbObjectError + 1000Const ERR_INVALID_TARGET = vbObjectError + 1001Const ERR_FILE_EXISTS = vbObjectError + 1002Const ERR_UPLOAD_CALLED = vbObjectError + 1003Const VB_ERR_PATH_NOT_FOUND = 76Private m_objContext As ObjectContextPrivate m_objRequest As ASPTypeLibrary.RequestPrivate m_strTarget As StringPrivate m_strFileName As StringPrivate m_blnOverWrite As BooleanPrivate m_blnUploaded As BooleanPrivate m_lngTotalBytes As Long'All other form elements go here.Private m_formCol As Scripting.DictionaryImplements ObjectControlPrivate Function ObjectControl_CanBePooled() As Boolean  ObjectControl_CanBePooled = FalseEnd FunctionPrivate Sub ObjectControl_Activate()  Set m_objContext = GetObjectContext()  Set m_objRequest = m_objContext("Request")  Set m_formCol = New Scripting.DictionaryEnd SubPrivate Sub ObjectControl_Deactivate()  Set m_objContext = Nothing  Set m_objRequest = Nothing  Set m_formCol = NothingEnd SubPublic Sub Upload()    Const DEFAULT_CHUNK_SIZE = 262144 '256kb    Dim bytBeginOfChunk() As Byte  Dim bytEndOfChunk() As Byte  Dim bytBeginOfName() As Byte  Dim bytEndOfName() As Byte  Dim bytBeginOfFile() As Byte  Dim bytEndOfFile() As Byte  Dim bytBeginOfValue() As Byte  Dim bytEndOfValue() As Byte  Dim bytName() As Byte  Dim bytValue() As Byte  Dim bytThisChunk() As Byte  Dim bytFileName() As Byte  Dim lngBeginOfChunk As Long  Dim lngEndOfChunk As Long    Dim lngBeginOfAttribute As Long  Dim lngEndOfAttribute As Long  Dim lngBeginOfValue As Long  Dim lngEndOfValue As Long  Dim blnEndOfData As Boolean  Dim lngChunkSize As Long  Dim lngBytesLeft As Long  Dim lngFileNum As Long  Dim strFileName As String    On Error GoTo UploadErr    If Uploaded Then    Err.Raise ERR_UPLOAD_CALLED, App.Title, "The Upload method has already been called."  End If       bytBeginOfChunk = StrConv("-----------------------------", vbFromUnicode)  bytEndOfChunk = StrConv("-----------------------------", vbFromUnicode)    bytBeginOfName = StrConv("name=", vbFromUnicode) & ChrB(34)  bytEndOfName = ChrB(34)    bytBeginOfFile = StrConv("filename=", vbFromUnicode) & ChrB(34)  bytEndOfFile = ChrB(34)    bytBeginOfValue = ChrB(13) & ChrB(10) & ChrB(13) & ChrB(10)  bytEndOfValue = ChrB(13) & ChrB(10) & StrConv("-----------------------------", vbFromUnicode)       'Initialize the chunk size.  If m_objRequest.TotalBytes <= DEFAULT_CHUNK_SIZE Then    lngChunkSize = m_objRequest.TotalBytes  Else    lngChunkSize = DEFAULT_CHUNK_SIZE  End If      'Get the chunk from the request object.  bytThisChunk = m_objRequest.BinaryRead(CVar(lngChunkSize))  'Initialize the value.  lngBeginOfChunk = 1    'Repeat until the end of the data.  Do While Not blnEndOfData    'Begin the chunk.    lngBeginOfChunk = InStrB(lngBeginOfChunk, bytThisChunk, bytBeginOfChunk) + UBound(bytBeginOfChunk)        'Get name of the item.    lngBeginOfAttribute = InStrB(lngBeginOfChunk, bytThisChunk, bytBeginOfName) + UBound(bytBeginOfName) + 1    lngEndOfAttribute = InStrB(lngBeginOfAttribute, bytThisChunk, bytEndOfName)    bytName = MidB(bytThisChunk, lngBeginOfAttribute, lngEndOfAttribute - lngBeginOfAttribute)        'Get the value of the item.    lngBeginOfValue = InStrB(lngEndOfAttribute, bytThisChunk, bytBeginOfValue, vbBinaryCompare) + UBound(bytBeginOfValue) + 1    lngEndOfValue = InStrB(lngBeginOfValue, bytThisChunk, bytEndOfValue, vbBinaryCompare)        If lngEndOfValue = 0 Then      'The item extends the past current chunk.      bytValue = MidB(bytThisChunk, lngBeginOfValue, lngChunkSize)    Else      'The item value exists in the current chunk.      bytValue = MidB(bytThisChunk, lngBeginOfValue, lngEndOfValue - lngBeginOfValue)    End If        If UCase(StrConv(bytName, vbUnicode)) = "FILE" Then      lngBeginOfAttribute = InStrB(lngBeginOfChunk, bytThisChunk, bytBeginOfFile, vbBinaryCompare) + UBound(bytBeginOfFile) + 1      lngEndOfAttribute = InStrB(lngBeginOfAttribute, bytThisChunk, bytEndOfFile, vbBinaryCompare)            bytFileName = MidB(bytThisChunk, lngBeginOfAttribute, lngEndOfAttribute - lngBeginOfAttribute)            If UBound(bytFileName) < 0 Or UBound(bytValue) < 0 Then        Err.Raise ERR_INVALID_FILENAME, App.Title, "Invalid File Name."      End If            If Me.Target = "" Then        Err.Raise ERR_INVALID_TARGET, App.Title, "Invalid Target."      End If            'Use the original file name.      If Me.FileName = "" Then              'Trim the path from the file name.        While InStrB(1, bytFileName, StrConv("\", vbFromUnicode), vbBinaryCompare) > 0          bytFileName = MidB(bytFileName, InStrB(1, bytFileName, StrConv("\", vbFromUnicode)) + 1)        Wend                'Set the property.        Me.FileName = StrConv(bytFileName, vbUnicode)                'Convert the byte to Unicode.        strFileName = Me.Target & Me.FileName             Else        strFileName = Me.Target & Me.FileName      End If            'Check for overwrite.      If Me.OverWrite Then        'This is the hack check. Make sure that wildcard characters cannot be used.        If Not InStr(1, strFileName, "*") Then          If FileExists(strFileName) Then            Kill strFileName          End If        Else          Err.Raise ERR_INVALID_FILENAME, App.Title, "The specified file name appears to be invalid."        End If      Else        If FileExists(strFileName) Then          Err.Raise ERR_FILE_EXISTS, App.Title, "The file already exists."        End If      End If            lngFileNum = FreeFile            Open strFileName For Binary Access Write As #lngFileNum            'Write the file to the destination directory.      Put #lngFileNum, , bytValue      'This chunk is empty. Therefore, get a new chunk.      lngBytesLeft = m_objRequest.TotalBytes - lngChunkSize              'Start the chunking machine.      Do While lngBytesLeft > 0              'Get a new chunk.        bytThisChunk = m_objRequest.BinaryRead(CVar(lngChunkSize))                            lngEndOfValue = InStrB(1, bytThisChunk, bytEndOfValue, vbBinaryCompare)                    If lngEndOfValue > 0 Then            'The item value exists in the current chunk.            bytThisChunk = MidB(bytThisChunk, 1, lngEndOfValue - 1)          End If                    'Append the chunk to the file.          Put #lngFileNum, , bytThisChunk                    lngBytesLeft = lngBytesLeft - lngChunkSize                    If lngBytesLeft < lngChunkSize Then            lngChunkSize = lngBytesLeft          End If        Loop                Close #lngFileNum                TotalBytes = FileLen(strFileName)             ' Exit Do     Else      If UCase(StrConv(bytName, vbUnicode)) = "SAVEAS" Then       Me.FileName = StrConv(bytValue, vbUnicode)      Else        'form field other than file, such as textboxes        If UBound(bytValue) > 0 And UBound(bytName) > 0 Then         m_formCol.Add StrConv(bytName, vbUnicode), StrConv(bytValue, vbUnicode)       Else        m_formCol.Add StrConv(bytName, vbUnicode), ""       End If      End If     End If        'Get the next chunk.    lngBeginOfChunk = lngEndOfValue        If InStrB(lngBeginOfChunk, bytThisChunk, bytBeginOfName, vbBinaryCompare) = 0 Then      blnEndOfData = True    End If  Loop  Uploaded = True    Exit Sub  UploadErr:    If Err.Number = VB_ERR_PATH_NOT_FOUND Then    Err.Raise ERR_INVALID_TARGET, App.Title, "The Target specified does not exist."  Else    Err.Raise Err.Number, Err.Source, Err.Description  End IfEnd SubPublic Property Get Form() As Collection    Set Form = m_formColEnd PropertyPublic Property Get FileName() As String  FileName = m_strFileNameEnd PropertyPublic Property Let FileName(ByVal strNewValue As String)  If Uploaded Then    Err.Raise ERR_UPLOAD_CALLED, App.Title, "The Upload method has already been called."  Else    m_strFileName = strNewValue  End IfEnd PropertyPublic Property Get OverWrite() As Boolean  OverWrite = m_blnOverWriteEnd PropertyPublic Property Let OverWrite(ByVal blnNewValue As Boolean)  If Uploaded Then    Err.Raise ERR_UPLOAD_CALLED, App.Title, "The Upload method has already been called."  Else    m_blnOverWrite = blnNewValue  End IfEnd PropertyPrivate Property Get Uploaded() As Boolean  Uploaded = m_blnUploadedEnd PropertyPrivate Property Let Uploaded(ByVal blnNewValue As Boolean)  m_blnUploaded = blnNewValueEnd PropertyPublic Property Get Target() As String  Target = m_strTargetEnd PropertyPublic Property Let Target(ByVal NewValue As String)  If Uploaded Then    Err.Raise ERR_UPLOAD_CALLED, App.Title, "The Upload method has already been called."  Else    m_strTarget = NewValue  End IfEnd PropertyPrivate Function FileExists(ByVal FileName As String) As Boolean  On Error GoTo FileExistsErr    FileLen FileName  FileExists = True  Exit Function  FileExistsErr:  If Err.Number = VB_ERR_PATH_NOT_FOUND Then    FileExists = False  End IfEnd FunctionPublic Property Get TotalBytes() As Long  TotalBytes = m_lngTotalBytesEnd PropertyPrivate Property Let TotalBytes(ByVal NewValue As Long)  m_lngTotalBytes = NewValueEnd Property
  9. Μεταγλωττίστε το έργο
back to the top

Ο κώδικας ASP

  1. Επικολλήστε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας, όπως το Σημειωματάριο (Notepad) ή Microsoft Visual Interdev και στη συνέχεια αποθηκεύστε το ωςPostFile.asp:
    <%@ Language=VBScript %><html><head></head><body><form enctype="multipart/form-data" action="uploadfile.asp" method="post" name="main1"><input name="file" type="file" size="50"><INPUT type="text" id=text1 name=text1><INPUT type="text" id=text2 name=text2><input name="submit" type="submit" value="Upload"></form></body></html>
  2. Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας, όπως το Σημειωματάριο ή Visual Interdev, και στη συνέχεια αποθηκεύστε το ως UploadFile.asp:
    <%@ Language=VBScript %><%  '//////////////////////////////////////////////////////////////////////////////////  '//  ASPFileUpload.File API  '//    '//  Properties  '//     FileName  '//       - Read/Write   '//       - The file will be saved with this file name.   '//       - This property can only be set before calling Upload.  '//       - If no value is specified, the original file name  '//       - in the HTTP post will be used.  '//       '//     OverWrite  '//       - Read/Write  '//       - This property can only be set before calling Upload.  '//       - If set to false and if the destination file exists, an error  '//       - is raised. The default value is False.  '//       '//     Target   '//       - Read/Write  '//       - The file will be written to this folder.  '//       - This property can only be set before calling Upload.  '//       - There is no default value for this property and it is required.  '//         '//      Form  '//        - ReadOnly  '//        - Scripting.Dictionary object  '//        - Can access a specific item by using aspfileupload.Form("item").  '//        - Acts like the asp form collection.  '//        - Can enumerate all values in a collection with for each.  '//        - Only filled after the Upload method is called.  '//           '//  Methods  '//     Upload  '//       - This method parses the HTTP Post and writes the file.  '//    '//  Other  '//    - ASPFileUpload requires COM+  '//    - Any call to the Request.Form() collection will cause the Upload  '//      method to fail as the method references the Binary contents of the  '//      Request object through the Request.BinaryRead method.   '//    - Also, if you access a variable in the Request collection without   '//      specifying the subcollection that it belongs to, the Request.Form collection   '//      may be searched. This causes an error in the Upload method.  '//        '//////////////////////////////////////////////////////////////////////////////////    Dim strMsg 'As String   ' On Error Resume Next  dim fuFile  set fuFile = server.CreateObject("aspFileupload.file")    'Set the destination folder.  fuFile.Target = "C:\TEMP\AspFileUpload\"  fuFile.Upload    If Err.number = 0 Then    strMsg = fuFile.FileName  & " was uploaded successfully."  Else    strMsg = "An error occurred when uploading your file: " & Err.Description   End If  for each o in fuFile.Form	Response.Write o  & "<BR>"		next		Response.Write fuFile.Form.item("text1") & "  :  " & fuFile.Form.item("text2")'  Response.Write Request.Form("test") set fufile = nothing%><html><head></head><body><%=strMsg%></body></html>
back to the top

Ρύθμιση του διακομιστή

  1. Δημιουργήστε ένα φάκελο στο διακομιστή Web που θα λάβει το Αποστολή αρχείων, όπωςC:\TEMP\AspFileUpload.
  2. Αντιγράψτε το αρχείο ASPFileUpload.dll στο διακομιστή Web και στη συνέχεια καταχωρήσετε, χρησιμοποιώντας την ακόλουθη εντολή στη γραμμή εντολών:
    regsvr32 PathToDLL\ASPFileUpload.dll
  3. Εφαρμογή των δικαιωμάτων αρχείου (πρόσβαση εγγραφής) για τους χρήστες που θέλετε να αποστείλετε τα αρχεία.
  4. Κάντε κλικ στο κουμπί Έναρξη, έπειτα στην επιλογήΡυθμίσεις, και στη συνέχεια κάντε κλικ στο κουμπί Στοιχείο ελέγχου Πίνακας.
  5. Στον πίνακα ελέγχου, κάντε κλικ στο κουμπί Διαχείρισης Εργαλεία, και στη συνέχεια κάντε κλικ στο κουμπί Υπηρεσίες στοιχείων Για να ανοίξετε Υπηρεσίες στοιχείων στην κονσόλα διαχείρισης της Microsoft (MMC).
  6. Αναπτύξτε το Υπηρεσίες στοιχείων κόμβος, τοΥπολογιστές κόμβος, το Ο υπολογιστής μου κόμβος, και τοΟι εφαρμογές COM + κόμβος.
  7. Κάντε δεξιό κλικ στον κόμβο, μετά στην επιλογή Νέα, και στη συνέχεια κάντε κλικ στο κουμπίΕφαρμογή.
  8. Με το Εγκατάσταση ή δημιουργία νέας εφαρμογής στο παράθυρο διαλόγου, κάντε κλικ στο κουμπί Δημιουργία κενής εφαρμογής, το όνομα της εφαρμογής, βεβαιωθείτε ότι κάνετε κλικ για να επιλέξετε Διακομιστής εφαρμογή, και στη συνέχεια κάντε κλικ στο κουμπί Επόμενη.
  9. Με το Ορισμός ταυτότητας εφαρμογής παράθυρο διαλόγου Κάντε κλικ Αυτός ο χρήστης, και στη συνέχεια πληκτρολογήστε τα διαπιστευτήρια για το κατάλληλο λογαριασμό χρήστη. Ο λογαριασμός χρήστη πρέπει να έχει πρόσβαση εγγραφής στο φάκελο που θα λάβετε το αρχείο που έχει αποσταλεί.
  10. Κάντε κλικ στο κουμπί Τέλος.
  11. Αναπτύξτε τον κόμβο που έχετε μόλις δημιουργήσει για αυτό εφαρμογή.
  12. Κάντε δεξιό κλικ στο νεύμα του, στην Νέα, και στη συνέχεια, κάντε κλικ στο κουμπί Το στοιχείο.
  13. Κάντε κλικ στο κουμπί Εγκατάσταση νέων στοιχείων, και εντοπίστε το φάκελο όπου έχουν αποθηκευτεί και καταχωρημένο αρχείο .dll, κάντε κλικ στο κουμπί το αρχείο, κάντε κλικ στο κουμπί Επόμενη, και στη συνέχεια κάντε κλικ στο κουμπίΤέλος.
  14. Αντιγράψτε το αρχείο Postfile.asp και το αρχείο Uploadfile.asp ο φάκελος ρίζας σας Web. Από προεπιλογή, είναι το ριζικό φάκελο Web C:\Inetpub\Wwwroot.
  15. Επεξεργασία στο φάκελο προορισμού του Uploadfile.asp ώστε να απεικονίζει το ο φάκελος που δημιουργήσατε στο βήμα 1. Η ανάθεση του φακέλου προορισμού βρίσκεται στο η ακόλουθη γραμμή κώδικα:
    fuFile.Target = "C:\TEMP\AspFileUpload\"					
Επιστροφή στην επάνω

Αποστολή ενός αρχείου

  1. Σε ένα πρόγραμμα περιήγησης Web, ανοίξτε τη σελίδα Postfile.asp κατά την παρακάτω URL:
    http://YourWebServer/Postfile.asp
  2. Επιλέξτε ένα αρχείο που θέλετε να αποστείλετε και στη συνέχεια κάντε κλικ στο κουμπίΑποστολή.
  3. Ελέγξτε το φάκελο αποστολής. Το αρχείο που θα αποσταλεί εμφανίζεται σε αυτόν το φάκελο.
back to the top

Αντιμετώπιση προβλημάτων

  • Εάν δεν πληκτρολογήσετε ένα όνομα αρχείου και προσπαθήσετε να υποβάλλετε σελίδα Postfile.asp, λαμβάνετε ένα μήνυμα σφάλματος γενικής χρήσης, πλευράς διακομιστή. Μπορείτε μπορεί να θέλετε να τροποποιήσετε τον κώδικα για την παροχή πιο φιλικό μήνυμα λάθους είτε το πρόγραμμα-πελάτης πλευρά ή στην πλευρά του διακομιστή.
  • Εάν απαιτείται ικανότητα αποστολής μεγάλου όγκου, Microsoft συνιστά να αγοράσετε ή να δημιουργήσετε ένα στοιχείο μεταγλωττισμένο, πολλαπλών νημάτων που μπορούν να πιο αποτελεσματικά να χειριστούν το φόρτο από αυτό το στοιχείο Visual Basic.
  • Υπάρχει πιθανό κίνδυνο ασφαλείας κάθε φορά που επιτρέπουν στους χρήστες Για να αποστείλετε αρχεία στο διακομιστή Web. Αυτό συμβαίνει εάν ο διακομιστής σας είναι στο Internet, και αν επιτρέπεται η ανώνυμη αποστολή. Πρέπει να σωστά ρύθμιση παραμέτρων δικαιωμάτων των Windows και ελέγχου ταυτότητας χρήστη των υπηρεσιών IIS για να βεβαιωθείτε ότι έχετε να δώσετε στους χρήστες μόνο την πρόσβαση που χρειάζονται. Αυτό είναι σημαντικό ώστε δεν επιτρέπουν στους χρήστες έναν τρόπο για να αποκτήσετε πρόσβαση, παρακάμπτοντας ελέγχους ασφαλείας του σας το σύστημα.
back to the top
πίσω πόρτας

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί αυτόματα

Ιδιότητες

Αναγνωριστικό άρθρου: 299692 - Τελευταία αναθεώρηση: 05/29/2011 12:57:00 - Αναθεώρηση: 4.0

Microsoft Active Server Pages 4.0, Microsoft Internet Information Services 5.0

  • kbaspobj kbcodesnippet kbconfig kbdeployment kbfile kbfso kbGuidelines kbhowto kbsample kbscript kbsecurity kbserver kbsetup kbwebserver kbmt KB299692 KbMtel
Σχόλια