FileUpload 改变输入流内容
FileUpload changing inputstream content
我有两个文件上传控件,允许用户同时上传 2 张图片。用户选择图片后,我使用 2 方法调整大小并裁剪发布的图像,然后将其保存到文件系统。当我想将调整大小和裁剪后的图像保存到文件系统时,就会出现问题。我使用了以下代码:
protected void Upload(object sender, EventArgs e)
{
if (FileUpload1.PostedFile!=null && FileUpload1.PostedFile.ContentLength>0)
{
string fileName = Path.GetFileName(DateTime.Now.Ticks + FileUpload1.PostedFile.FileName);
string fileName2 = Path.GetFileName(DateTime.Now.Ticks + FileUpload2.PostedFile.FileName);
CropImage(FileUpload1);
CropImage(FileUpload2);
FileUpload1.PostedFile.SaveAs(Server.MapPath("images/") + fileName);
FileUpload2.PostedFile.SaveAs(Server.MapPath("images/") + fileName2);
Response.Redirect(Request.Url.AbsoluteUri);
}
}
private void CropImage(FileUpload fileup)
{
System.Drawing.Image image2 = System.Drawing.Image.FromStream(fileup.PostedFile.InputStream);
int x = image2.Width;
int y = image2.Height;
System.Drawing.Image resizedImage = UIHelper.ResizeImage(image2, new System.Drawing.Size(1140,x/y*1140));
System.Drawing.Image croppedImage = UIHelper.CropImage(resizedImage, new System.Drawing.Rectangle(0, 0, 1140, 650));
MemoryStream ms = new MemoryStream();
croppedImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
// getting bytes from the cropped image;
byte[] slika = ms.ToArray();
fileup.PostedFile.InputStream.Write(slika, 0, slika.Length);
// changing the original input stream with the cropped one
}
现在我想用裁剪后的字节替换原始文件上传输入流的字节。谁能告诉我我是不是做错了,或者我只是没看出这里有什么问题??
我得到的错误是:
"不支持指定的方法",
在这行代码中:
fileup.PostedFile.InputStream.Write(slika, 0, slika.Length);
有什么解决办法吗?谢谢!!
如果要将调整后的图片保存到磁盘,则必须使用另一种方法:
File.WriteAllBytes("yourPath..slika.jpg", slika);
并使用
"using"
安全处置
using (var ms = new MemoryStream())
{
}
我有两个文件上传控件,允许用户同时上传 2 张图片。用户选择图片后,我使用 2 方法调整大小并裁剪发布的图像,然后将其保存到文件系统。当我想将调整大小和裁剪后的图像保存到文件系统时,就会出现问题。我使用了以下代码:
protected void Upload(object sender, EventArgs e)
{
if (FileUpload1.PostedFile!=null && FileUpload1.PostedFile.ContentLength>0)
{
string fileName = Path.GetFileName(DateTime.Now.Ticks + FileUpload1.PostedFile.FileName);
string fileName2 = Path.GetFileName(DateTime.Now.Ticks + FileUpload2.PostedFile.FileName);
CropImage(FileUpload1);
CropImage(FileUpload2);
FileUpload1.PostedFile.SaveAs(Server.MapPath("images/") + fileName);
FileUpload2.PostedFile.SaveAs(Server.MapPath("images/") + fileName2);
Response.Redirect(Request.Url.AbsoluteUri);
}
}
private void CropImage(FileUpload fileup)
{
System.Drawing.Image image2 = System.Drawing.Image.FromStream(fileup.PostedFile.InputStream);
int x = image2.Width;
int y = image2.Height;
System.Drawing.Image resizedImage = UIHelper.ResizeImage(image2, new System.Drawing.Size(1140,x/y*1140));
System.Drawing.Image croppedImage = UIHelper.CropImage(resizedImage, new System.Drawing.Rectangle(0, 0, 1140, 650));
MemoryStream ms = new MemoryStream();
croppedImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
// getting bytes from the cropped image;
byte[] slika = ms.ToArray();
fileup.PostedFile.InputStream.Write(slika, 0, slika.Length);
// changing the original input stream with the cropped one
}
现在我想用裁剪后的字节替换原始文件上传输入流的字节。谁能告诉我我是不是做错了,或者我只是没看出这里有什么问题??
我得到的错误是:
"不支持指定的方法", 在这行代码中:
fileup.PostedFile.InputStream.Write(slika, 0, slika.Length);
有什么解决办法吗?谢谢!!
如果要将调整后的图片保存到磁盘,则必须使用另一种方法:
File.WriteAllBytes("yourPath..slika.jpg", slika);
并使用
"using"
安全处置
using (var ms = new MemoryStream())
{
}