Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để tải lên tập tin vào một máy chủ Web bằng cách sử dụng ASP

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:299692
Đối với một Microsoft Visual Basic.NET Phiên bản của bài viết này, xem 315832.
TÓM TẮT
Bài viết này mô tả cách bật máy chủ Web của bạn nhận được giao dịch chuyển tập tin từ các trang Microsoft Active Server Pages (ASP) bằng cách sử dụng một phía máy chủ Microsoft COM + thành phần.

Lưu Ý: Hỗ trợ của Microsoft ranh giới cho phát triển Visual Basic 6 đã thay đổi. Để biết thêm chi tiết, xin vui lòng xemhttp://MSDN.Microsoft.com/en-US/vstudio/ms788708.

back to the top

Yêu cầu

  1. Microsoft Windows 2000 thông tin Internet của Microsoft Server 5,0 (IIS) được cài đặt và cấu hình
  2. Nếu máy tính của bạn phát triển là một máy tính khác nhau hơn máy chủ, bạn phải có một mạng hợp lệ hoặc Internet kết nối tới hệ phục vụ mà chủ các trang ASP.
Quay lại đầu trang

Thiết lập dự án Microsoft Visual Basic 6 và mã số

  1. Bắt đầu Visual Basic, và sau đó bắt đầu một DLL ActiveX mới dự án.
  2. Tên dự ánASPFileUpload.
  3. Thay đổi tên của Class1 đểTập tin.
  4. Trên các Dự án trình đơn, nhấp vào Tài liệu tham khảo.
  5. Trong các Tài liệu tham khảo hộp thoại, bấm để chọn các tùy chọn sau đây, và sau đó nhấp vào Ok:
    • Visual Basic cho các ứng dụng
    • Các đối tượng runtime Visual Basic và thủ tục
    • Các đối tượng Visual Basic và thủ tục
    • OLE tự động hóa
    • COM + dịch vụ loại thư viện
    • Microsoft Active Server Pages đối tượng thư viện
    • Microsoft Script Runtime
  6. Trên các Dự án trình đơn, nhấp vào Thuộc tính aSPFileUpload.
  7. Trong các Thuộc tính dự án hộp thoại, Click vào để chọn Thực hiện không giám sátCó thể giữ lại bộ nhớ, sau đó bấm Ok.
  8. Dán mã sau đây để 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. Biên dịch dự án
back to the top

ASP Code

  1. Dán đoạn mã sau vào một trình soạn thảo như Notepad hoặc Microsoft Visual Interdev, và sau đó lưu nó như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. Copy đoạn mã sau vào một trình soạn thảo như Notepad hoặc Trực quan Interdev, và sau đó lưu nó như 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

Thiết lập máy chủ

  1. Tạo một thư mục trên máy chủ Web đó sẽ nhận được các tải lên tập tin, chẳng hạn nhưC:\TEMP\AspFileUpload.
  2. Sao chép các tập tin ASPFileUpload.dll vào máy chủ Web, và sau đó đăng ký nó bằng cách sử dụng lệnh sau tại dấu nhắc lệnh:
    regsvr32 PathToDLL\ASPFileUpload.dll
  3. Áp dụng tệp cấp phép (Write access) cho những người bạn muốn để có thể tải lên các tập tin sử dụng.
  4. Nhấp vào Bắt đầu, điểm đếnThiết đặt, sau đó bấm Kiểm soát Bảng điều khiển.
  5. Trong bảng điều khiển, nhấp vào Hành chính Công cụ, sau đó bấm Thành phần dịch vụ để mở Thành phần dịch vụ trong Microsoft Management Console (MMC).
  6. Mở rộng các Thành phần dịch vụ nút, cácMáy vi tính nút, các Máy tính của tôi nút, và cácCOM + các ứng dụng nút.
  7. Nhấp chuột phải vào nút, điểm đến Mới, sau đó bấmỨng dụng.
  8. Trong các Cài đặt hoặc tạo ra một ứng dụng mới hộp thoại hộp, bấm vào Tạo một ứng dụng có sản phẩm nào, tên ứng dụng, hãy chắc chắn rằng bạn bấm để chọn Hệ phục vụ ứng dụng, sau đó bấm Tiếp theo.
  9. Trong các Đặt ứng dụng nhận dạng hộp thoại hộp, bấm vào Người dùng này, và sau đó nhập ủy nhiệm cho các trương mục người dùng thích hợp. Trương mục người dùng phải có quyền truy cập ghi vào thư mục mà sẽ nhận được các tập tin được tải lên.
  10. Nhấp vào Kết thúc.
  11. Mở rộng nút mà bạn đã tạo này ứng dụng.
  12. Nhấp chuột phải vào gật, điểm đến Mới, và sau đó bấm Thành phần.
  13. Nhấp vào Cài đặt các thành phần mới, và xác định vị trí thư mục nơi bạn đã lưu và đăng ký .dll tệp, bấm các tập tin, nhấp vào Tiếp theo, sau đó bấmKết thúc.
  14. Sao chép các tập tin Postfile.asp và các tập tin Uploadfile.asp Web thư mục gốc của bạn. Theo mặc định, thư mục gốc của trang Web là C:\Inetpub\Wwwroot.
  15. Chỉnh sửa thư mục đích của Uploadfile.asp để phản ánh các thư mục mà bạn đã tạo ở bước 1. Phân công cặp đích là thị dòng mã sau đây:
    fuFile.Target = "C:\TEMP\AspFileUpload\"					
Quay lại đầu trang

Gửi tác phẩm

  1. Trình duyệt Web, mở trang Postfile.asp ở các URL sau:
    http://YourWebServer/Postfile.asp
  2. Chọn một tập tin mà bạn muốn tải lên, và sau đó nhấp vàoTải lên.
  3. Kiểm tra thư mục tải lên của bạn. Các tập tin mà bạn tải lên sẽ xuất hiện trong cặp này.
back to the top

Giải đáp thắc mắc

  • Nếu bạn không phải gõ tên tệp, và nếu bạn cố gắng gửi các trang Postfile.asp, bạn nhận được một thông báo lỗi chung chung, phía máy chủ. Bạn có thể muốn thay đổi mã để cung cấp một thông báo lỗi thân thiện hơn vào một khách hàng bên hoặc về phía máy chủ.
  • Nếu bạn yêu cầu số lượng lớn tải lên năng lực, Microsoft khuyến cáo bạn mua hoặc xây dựng một thành phần biên soạn, multithreaded có thể nhiều hiệu quả xử lý tải hơn này thành phần Visual Basic.
  • Một nguy cơ bảo mật tiềm năng tồn tại bất cứ khi nào bạn cho phép người dùng để tải lên tập tin vào máy chủ Web của bạn. Điều này đặc biệt đúng nếu máy chủ của bạn trên Internet, và nếu bạn cho phép chưa xác định người tải lên. Bạn phải chính xác cấu hình cấp phép Windows và IIS người dùng xác thực để đảm bảo rằng bạn cung cấp cho người sử dụng chỉ truy cập mà họ yêu cầu. Điều này là quan trọng để bạn không cho phép người dùng một cách để được truy cập bởi bỏ qua kiểm soát an ninh của bạn hệ thống.
back to the top
cửa sau

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 299692 - Xem lại Lần cuối: 01/04/2012 20:55:00 - Bản sửa đổi: 2.1

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 KbMtvi
Phản hồi