Скорее всего, потому что вы не получили все данные файла в байтовый массив. Метод Read не должен возвращать столько байтов, сколько вы запрашиваете, и возвращает количество байтов, фактически помещенных в массив. Вы должны выполнить цикл, пока не получите все данные:
int contentLength = postedFile.ContentLength;
byte[] data = new byte[contentLength];
for (int pos = 0; pos < contentLength; ) {
pos += postedFile.InputStream.Read(data, pos, contentLength - pos);
}
Это распространенная ошибка при чтении из потока. Я видел эту проблему много раз.
Edit:
С проверкой раннего конца потока, как предложил Мэтью, код будет:
int contentLength = postedFile.ContentLength;
byte[] data = new byte[contentLength];
for (int pos = 0; pos < contentLength; ) {
int len = postedFile.InputStream.Read(data, pos, contentLength - pos);
if (len == 0) {
throw new ApplicationException("Upload aborted.");
}
pos += len;
}