CopyTo при использовании файлов xlsx выдает ошибку при открытии

1

У меня есть следующий обработчик IHttpHandler (ashx):

public class UploadFile : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        using (var fileStream = File.OpenWrite(@"C:\" + context.Request.QueryString["FileName"]))
        {
            context.Request.InputStream.CopyTo(fileStream);
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Которое вызывается из:

$.ajax({
    type: "POST",
    url: "UploadFile.ashx?FileName=" + file.name,
    data: file,
    success: function () {
        alert("Success");
    },
    processData: false,
    contentType: file.type
});

Файловая переменная поступает из файла <input type="file"/> и извлекается с использованием document.getElementById("fuExcelFile").files[0].

Это работает с кажущимся файлом, отличным от xlsx. С xlsx файл загружается, но когда я его открываю в Excel, я получаю следующую ошибку:

Мы обнаружили проблему с некоторым контентом в.xlsx. Вы хотите, чтобы мы попытались восстановить как можно больше? Если вы доверяете источнику этой книги, нажмите "Да".

Я не уверен, куда идти отсюда, поскольку он работает с другими файлами: S

EDIT: Вот файл im test with и его изображение в шестнадцатеричном редакторе Изображение 174551

Теги:
excel
file
input
stream

1 ответ

1
Лучший ответ

Это было тяжело.

В обсуждении в комментарии мы выяснили, что целевой файл больше, чем источник. Excel все еще мог открыть его, но выдал предупреждения. Это пахло, как частичная коррупция.

Оказывается, File.OpenWrite добавляет к существующему файлу. Во время тестирования вы добавляете один и тот же файл снова и снова.

Ключом к отладке было бинарное сравнение файлов. Когда вы застряли с ошибкой и не знаете, что это такое: исследуйте! Эксперимент. Получите новую информацию. Измените настройку.

  • 1
    Я не могу поверить, что это было просто, большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню