任何上传的图像文件都以相同的大小保存

Posted

技术标签:

【中文标题】任何上传的图像文件都以相同的大小保存【英文标题】:Any upload image file is saving with same size 【发布时间】:2013-09-20 07:16:11 【问题描述】:

我有一个 wcf rest,它正在从安卓设备接收图像并保存到公共共享文件夹中。

一切正常,但在将图像文件(实际图像大小为 15kb)保存到我的共享文件夹时,它保存为 489kb。

任何图像文件都只保存 489kb。我发现了为什么它会这样保存的问题..

这是我的代码..

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "UploadImage")]
public string RecieveImage(Stream ImageStream)

    try
    
        byte[] buffer = new byte[500000];
        ImageStream.Read(buffer, 0, 500000);
        FileStream f = new FileStream(@"c:\desktop\wcfUploadImage.jpeg", FileMode.OpenOrCreate);               
        f.Write(buffer, 0, buffer.Length);
        f.Close();
        f.Dispose();
    
    catch (Exception ex)
    
        throw new WebFaultException<string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
    

    return "Successsfully recieved.";

因为 byte[500000] 我只保存了 489kb 的图像。如果我将 500000 替换为 ImageStream.length,则会出现错误。

保存实际大小的图像的正确方法是什么?

【问题讨论】:

你只读取了500Kb...你需要读取直到Read方法返回0。而且确实你必须使用ImageStream.length读取整个文件,使用它时会出现什么错误?尝试将其转换为 int,因为它返回 long 【参考方案1】:

StreamRead 方法返回它实际上读取为Int32 的字节数。使用该值。

请注意,如果它返回您要求的确切字节数(例如 500000),那么您很可能需要再次读取流:仍有未读取的数据。

【讨论】:

谢谢..我没有得到“请注意,如果它完全返回您要求的最大值(例如 500000),那么您需要再次阅读流:那里仍然是未读数据。”观点。你能简单解释一下吗 @Balu 对不起我的英语,我已经修复了语法错误。我的意思是你应该Read data 直到返回的字节数为零。 没关系 Agenfire.. :) 在这里我又发布了一个问题,请纠正老兄....***.com/questions/18827088/… 或codeproject.com/Questions/654219/… 或social.msdn.microsoft.com/Forums/vstudio/en-US/…

以上是关于任何上传的图像文件都以相同的大小保存的主要内容,如果未能解决你的问题,请参考以下文章

如何在上传到服务器之前减小图像文件大小

画布图像的图像效果不使用 php 上传保存,但适用于下载相同的画布文件

上传图像然后共享而不使用 sharedObject 或任何东西将文件保存在 Flex 上?

如何保存具有特定文件大小的图像?

jQuery 上传会以一定的分辨率调整图像大小

如何使用ImageField模型调整使用Django上传的图像文件的大小? [关闭]