#asp.net
#asp.net
Вопрос:
Я должен сохранить загруженное изображение на диске, но сначала я должен проверить, не имеет ли изображение ширины или высоты меньше 50 пикселей. Поскольку я знаю, что когда мы используем stream, мы должны утилизировать этот поток, поэтому я использую ‘using’ в методе проверки:
public bool CheckDimensions(HttpPostedFile file)
{
using (Stream stream = file.InputStream)
{
System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
if (image.PhysicalDimension.Width < 50 || image.PhysicalDimension.Height < 50)
{
return false;
}
return true;
}
}
Но тогда я не могу сохранить изображение своим вторым методом, потому что длина содержимого файла HttpPostedFile равна 0. Когда я не использую инструкцию ‘using’, длина содержимого HttpPostedFile верна (> 0). Значит, в таком случае я не должен утилизировать stream?
Ответ №1:
Потому что file.InputStream
это ссылка на загруженный файл. Удаление его с помощью using
инструкции означает, что он удаляется везде, где на него также ссылаются / используются
Попробуйте
using(Stream stream = file.InputStream)
{
bool isRightSize = CheckDimensions(stream);
... other operations on the stream
}
public bool CheckDimensions(Stream stream)
{
System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
if (image.PhysicalDimension.Width < 50 || image.PhysicalDimension.Height < 50)
{
return false;
}
return true;
}
Комментарии:
1. Спасибо — должны ли мы явно закрыть его, потому что на этом сайте: msdn.microsoft.com/en-us/library/system.web.httppostedfile.aspx у нас есть информация «Ресурсы сервера, которые выделены для буферизации загруженного файла, будут уничтожены по завершении запроса».
2. Я не думаю, что это связано. Я думаю, это означает, что при обратной публикации страницы файл больше не будет доступен, поэтому вам придется загрузить его снова или использовать SaveAs, чтобы сохранить его на диск для последующего использования