У меня есть следующий обработчик 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 и его изображение в шестнадцатеричном редакторе
Это было тяжело.
В обсуждении в комментарии мы выяснили, что целевой файл больше, чем источник. Excel все еще мог открыть его, но выдал предупреждения. Это пахло, как частичная коррупция.
Оказывается, File.OpenWrite
добавляет к существующему файлу. Во время тестирования вы добавляете один и тот же файл снова и снова.
Ключом к отладке было бинарное сравнение файлов. Когда вы застряли с ошибкой и не знаете, что это такое: исследуйте! Эксперимент. Получите новую информацию. Измените настройку.