2012-01-24 81 views
0

我想保存一个jpeg图像在上传文件夹中有正确的权限设置。当我测试文件正在保存时(例如:images/uploads/Winter.jpg),但如果我尝试在浏览器中查看图像,或者如果我尝试使用其他任何方法打开图像,图像将不会显示。asp.net图像jpeg没有正确保存

我认为文件在保存到磁盘之前没有被正确编码,但在处理保存文件,编码方面并不是很有经验。下面的代码看起来不错,还是需要在将文件保存到磁盘之前以某种方式对要上传的文件进行编码?

String imgPath = "newsletter\\images\\uploads\\"; 

String filename = System.IO.Path.GetFileName(upload.PostedFile.FileName); 

filepath = imgPath + filename; 

filepath = Request.PhysicalApplicationPath + filepath; 
upload.PostedFile.SaveAs(filepath); 

该文件保存到正确的文件夹,但只有150bytes的大小。如果我尝试浏览该文件并使用图像查看器查看它,则无法正确显示。

+0

文件大小是多少?你有没有在按钮点击事件? –

+0

当你直接浏览到服务器上的文件夹是那里的图像?你可以用图像查看器查看它吗? – Oded

+0

@ShadowWizard - 通过将FileUpload控件作为“upload”传递给saveImage函数,从另一个函数调用该函数。 – TGuimond

回答

1

编码不应该是一个问题 - 原始数据不会改变。但是,在保存数据之前,浏览器可能不会发送所有数据,或者上传控件正在删除数据。

确保您拨打前.SaveAs()的页面开始卸载,并之前任何额外的回传。我想我们需要看到更多的周边代码来进一步提高。

另一个注意事项 - 通过允许使用现有的文件扩展名,您允许用户上传.aspx文件,随后可以通过请求执行.aspx文件。安全文件名是GUID和白名单文件扩展名。使用未经过清理的上传路径信息非常危险。如果您重新使用文件名,请将其清除为字母数字。