【问题标题】:Shrink Uploaded file size (Image)缩小上传的文件大小(图片)
【发布时间】:2011-08-06 15:15:04
【问题描述】:

我在网上搜索了很多,但没有.......

我的问题是我想将任何上传文件的实际大小减小到特定长度

另外我不想强制用户使用特定的 ContentLength

例如:-
上传的文件大小为 1mb(或任何大小)--> 减少到 500kb

   任何帮助 .... 我将不胜感激。

更具体地说,如果这有帮助,我只想上传图片

【问题讨论】:

  • 拒绝太大的文件不是更好吗?在大多数情况下,无论如何,您都会通过截断文件来破坏文件。
  • 您的意思是要限制某人可以上传的最大文件大小?
  • 您想破坏用户的文件吗?
  • 所以...你只想保留他们寄给你的一半?我想不出有什么好处。
  • 用 zip 或 7z 或类似的方式压缩它

标签: c# javascript asp.net upload


【解决方案1】:

如果我正确理解了您的问题,我认为这是不可能的(或者至少不那么容易)。当用户将文件上传到您的网站时,该文件实际上是 POST 数据。如果你使用像 Fiddler http://www.fiddler2.com/fiddler2/ 这样的工具,如果我没记错的话,你可以在那里看到它,Base64 Encoded。所以,用户已经发送了完整的数据。

我看到你已经用asp.net 标记了你的问题,因此,此时 asp.net 正在查看请求,检查帖子的长度是否与允许的最大大小(在 web.config 中配置)相符,如果出现则拒绝该帖子你甚至被允许看到它之前的时间太长了(我试过了)。

我认为您能做的最好的事情(如果这是您真正需要做的)是将您的网络配置中的 maxRequestLength 设置为一个不会被拒绝的足够大的值,然后自己截断数据。

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="32768" />
    </system.web>
</configuration>

【讨论】:

  • 谢谢.. 但这并不能解决大文件大小的问题
  • 好的,但也许您可以帮助我了解您的期望。您是否希望用户浏览器在 500KB 后停止发送数据(不可能)?或者您想在上传完整大小的数据集后自己找到一种截断数据的方法?还是有什么不同?
【解决方案2】:

您可以增加最大值。通过将以下部分添加到您的 web.config 来上传大小:

<system.web>
   <httpRuntime  maxRequestLength="102400" executionTimeout="360"/>
</system.web>

102400 == 1GB

【讨论】:

【解决方案3】:

据我了解,您希望允许用户上传任何大小的文件,但仅在服务器上处理收缩文件。并且不要浪费时间和流量上传整个文件。所以我不知道在 IIS 上接收请求正文的过程中是否有干扰的能力,这就是为什么我建议在客户端进行收缩。

为此,您可以使用 Silverlight、Flash。 (当然你不能只用 javascript 来做,因为它无法访问客户端的文件系统)。下面是使用 silverlight 实现简单文件上传的示例:Link。在上传之前,您需要修改一点代码来剪切文件。

另一个变体是尝试使用Plupload。它允许您使用 HTML5 Gears、Silverlight、Flash 上传文件,提供分块上传功能。您可以尝试调查此开源项目,以使其适应您的需求。

(您也可以在发送前尝试在客户端压缩文件)

祝你好运。

【讨论】:

    【解决方案4】:

    将您的文件转换为字节数组并将其拆分为您喜欢大小的多个字节数组。稍后,如果您愿意,可以将这些数组写入多个不同的文件。

    【讨论】:

      最近更新 更多