Я перебираю папку и пытаюсь загрузить каждый файл в папке в систему управления документами со следующим кодом:
Dim webRequest As MSXML2.XMLHTTP60: Set webRequest = New MSXML2.XMLHTTP60
Call webRequest.Open(HTTPPost, adress, False)
Const Boundary As String = "AaB03x"
Call webRequest.setRequestHeader(HTTPHeaderValueContentType, "multipart/form-data;boundary=" & Boundary)
Call webRequest.setRequestHeader(HTTPHeaderValueCallingApplication, get_sys_db)
Call webRequest.setRequestHeader("Connection", "Keep-Alive")
Call webRequest.setRequestHeader("cache-control", "no-cache")
Dim byteData As Variant
With CreateObject("ADODB.Stream")
.Type = StreamType.Binary
.Mode = StreamMode.ReadWrite
.Open
Call .LoadFromFile(fileName)
byteData = .Read 'Somethimes here I get the "out of memory" error
End With
'dim requestData as Variant
With CreateObject("ADODB.Stream")
.Mode = StreamMode.ReadWrite
.Charset = WindowsCharset
.Open
.Type = StreamType.Text
Dim uploadFilename As String
uploadFilename = ZConverter.VariantToString(cut_file(fileName))
.WriteText CreateContentDisposionText("itemName", uploadFilename, Boundary)
.WriteText CreateContentDisposionText("parentNickname", parentNickname, Boundary)
.WriteText vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""file""; filename=""" & fileName & """" & vbNewLine
.WriteText vbNewLine
.Position = StreamPositionStart
.Type = StreamType.Binary
.Position = .Size
.Write byteData
Set byteData = Nothing
.Position = StreamPositionStart
.Type = StreamType.Text
.Position = .Size
.WriteText vbNewLine & vbNewLine & "--" & Boundary & "--" & vbNewLine
.Position = StreamPositionStart
.Type = StreamType.Binary
Call webRequest.Send(.Read) 'Here I get the "out of memory" error most of the time
End With
Так что это прекрасно работает для небольших файлов.
Но когда я пытаюсь загрузить файл с 420 МБ, я получаю сообщение об ошибке: «Недостаточно памяти для этой задачи» (оригинал: «Für diesen Vorgang ist nicht genügend Speicher verfügbar.»).При открытом VBE (среде разработки) происходит сбой даже при 20 МБ-файлах.
Для доступа требуется ~ 55 МБ ОЗУ с закрытым VBE и 140 МБ с открытым VBE.Поскольку использование памяти всегда возвращается к этим значениям, я не думаю, что произошла утечка памяти.
Итак: есть ли способ расширить доступную оперативную память для доступа, поскольку на компьютере> 3 ГБ свободной оперативной памяти?А если нет, то есть ли способ изменить код, чтобы не нужно было столько памяти сразу?
Обновление: Как я загружаю файл, это результат моего вопроса о переполнении стека: Загрузить pdf через multipart-HTML-Post файл изменений