Код хорошо работает на моей стороне (в IE 11). Попробуйте использовать средства разработчика F12, чтобы проверить элементы документа, проверить, изменился ли URL. Также вы можете попробовать сбросить настройки браузера IE или переустановить браузер IE.
Вы могли бы хотеть изучить Массив. Копия или Буфер. BlockCopy; это очистит вещи немного, так как Вы не должны будете копировать все байты индивидуально:
int incomingOffset = 0;
while(incomingOffset < incomingArray.Length)
{
int length =
Math.Min(outboundBuffer.Length, incomingArray.Length - incomingOffset);
// Changed from Array.Copy as per Marc's suggestion
Buffer.BlockCopy(incomingArray, incomingOffset,
outboundBuffer, 0,
length);
incomingOffset += length;
// Transmit outbound buffer
}
Опасайтесь называть веб-сервисы в цикле синхронно. Синхронные вызовы веб-сервиса занимают время из-за природы HTTP, и Ваш цикл мог бы работать в течение долгого времени. Желательно использовать асинхронный подход.
Почему не только используют Массив. Копия? http://msdn.microsoft.com/en-us/library/system.array.copy.aspx
например.
Array.Copy(srcBuffer, destBuffer, 1024);
Вы, вероятно, хотите Buffer.BlockCopy
(самая сырая из копий; идеально подходящий для byte[]
).
Конечно, другая опция состоит в том, чтобы использовать a MemoryStream
вместо исходящего массива, и просто Write
к нему каждый раз, затем звоните ToArray()
или GetBuffer()
на MemoryStream
(с GetBuffer()
, необходимо наблюдать длину; с ToArray()
это обрезается для Вас автоматически):
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[BUFFER_SIZE];
int bytesReceived;
while((bytesReceived = GetNextChunk(buffer, 0, BUFFER_SIZE)) > 0) {
ms.Write(incomingArray, 0, bytesReceived);
}
byte[] final = ms.ToArray();
Вы, кажется, сломали свою задачу логически, в конце концов, Вы когерентно описали ее со словами. Теперь просто заставьте свой код сделать это.
Псевдо код мог бы быть чем-то как:
while (there are chunks in incoming array)
copy 1 chunk to outbound array
create uploadObject
call webservice
endwhile