При попытке загрузить большие файлы (100-500 МБ) я получаю знакомое " OutOfMemoryException ", вызванное попыткой сразу прочитать весь файл в памяти (задан и ответил здесь на stackoverflow). Я знаю, что я должен использовать поток или делить файл на более мелкие части. Изменение кода прокси вручную является опцией, если это помогает. Я использую конкретный веб-сервис (CMWebService).
Поскольку я не могу изменить код IBM, есть ли способ отправить файл в более мелкие части? Я уже нашел классы UpdateItemRequestAdd и UpdateItemRequestAddPart, но я не могу заставить их работать. К сожалению, также нет образцов, доступных IBM.
Получение файлов создает ту же проблему, и я не смог найти какие-либо классы, которые могли бы мне помочь.
Это код, который я сейчас использую для загрузки файлов:
string resources0 = "tiffFileContent";
string resources1 = "image/tiff";
string resources2 = @"D:\myImageFile.tif";
CreateItemRequest createRequest = new CreateItemRequest()
{
AuthenticationData = data,
Item = new CreateItemRequestItem()
{
ItemXML = new ItemXML()
{
MYITEMTYPE = new MYITEMTYPE()
{
ArchiveId = "4719",
ICMBASE = new ICMBASE[] {
new ICMBASE(){
resourceObject = new LobObjectType()
{
label = new LobObjectTypeLabel()
{
name= resources0
},
MIMEType = resources1,
originalFileName = resources2
},
}
}
}
},
},
mtomRef = new MTOMAttachment[] { new MTOMAttachment() {
ID = resources0,
MimeType = resources1,
Value = System.IO.File.ReadAllBytes(resources2), // Error on large files
}},
};
var createReply = service.CreateItem(createRequest);
Мы "разрешили" это, сказав нашему клиенту, чтобы получить более мощную систему с большим объемом оперативной памяти. Имея 4-8 ГБ оперативной памяти, мы могли без проблем загружать файлы до 200 МБ.
Получив большие файлы, Java-HeapSize в IBM Content Manager пришлось увеличить. http://www.mkyong.com/websphere/how-to-increase-websphere-jvm-memory/