上传后使用UploadedFile.SaveAs("")保存文件,文件质量降低。

8

我正在使用<asp:FileUpload />上传文件(图片),在代码后端中,我使用UploadedFile.SaveAs("C://Path...")将图像保存在服务器上。

这是我的完整代码:

protected void btnAddImage_OnClick(object sender, ImageClickEventArgs e)
{
    //_fuImage is the ID of the <asp:FileUpload />
    _fuImage.SaveAs(Server.MapPath(fullPath));
}

问题在于它似乎降低了质量。以下是一些例子:左侧的图像是我要上传的,右侧的图像是上传到服务器上的。
Example 1Example 2Example 3
感谢Ashigore使其工作。
byte[] imageBytes = _fuImage.FileBytes;
File.WriteAllBytes(Server.MapPath(fullPath), imageBytes);

我已将字节存储在一个变量中,并将原始字节保存为图像文件上传到服务器。


1
你改变图像格式吗? - Tigran
不,我只使用SaveAs(),没有更多也没有更少,我不修改任何东西。 - user2742371
1
这两者之间展示的图片有任何不同吗?例如 <img width="x" /> - Steven V
1
@StevenV 所有上传的3张图片都是JPEG文件,但正如您所看到的,在上传之前它们看起来非常好。 - user2742371
1
这些看起来不是更糟,而是更好。对比度更高了。 - Cole Tobin
显示剩余4条评论
2个回答

5
我的猜测是您在使用一个Image对象,在某处将jpg数据转换为原始位图数据并在保存时重新编码它。在这种情况下,您需要仅以原始字节方式处理数据,以便保留原始质量。

但是我使用标准的 ASP.Net 方法:UploadedFile.SaveAs(string arg),它不会进行任何转换。 - user2742371
3
嗯,看起来你似乎证明了相反的事情。你确定所有这些都发生在图像上吗? - Ashigore
我发布了我使用的所有代码。但我开始认为 SaveAs("") 确实会转换数据。你知道我可以使用另一种不转换字节的方法来保存它,以便我可以将其完全上传吗? - user2742371
1
为了论证,使用FileUpload.FileBytes并使用File.WriteAllBytes或FileStream来保存数据,看看会发生什么。 - Ashigore

1
你能直接在磁盘上查看由此操作保存的文件而不使用网站吗?与原始文件进行比较,是否有差异?当显示图像时,您可能会以某种方式更改图像。另一种方法是使用 FileUploadControl.OpenFile()获取流,并手动将其写入磁盘。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接