【发布时间】:2012-11-17 09:47:25
【问题描述】:
我很难完成某件事。
我正在使用 asp.net MVC 4 构建一个邮件客户端。
我现在必须将与消息(不是附件)相关的图像下载到客户端浏览器。
现在我有了这个设置:
客户端浏览器 -> 控制器/后端 -> 邮件服务器
澄清:我有一个客户端请求,其中包含图像的内容 ID、正确的邮箱、消息等。有了这些信息,我可以从邮件服务器下载图像并将其上传到客户端。 现在是困难的部分:我想异步执行此操作。我希望能够从邮件服务器下载 512 KB 的块,解码该部分,并将其发送到客户端.. 获取 - 解码 - 发送.. 只要浏览器获得图像的所有数据。
我只是不想先将所有数据下载到服务器,然后使用所有数据创建一个新的内存流并将其作为文件结果返回。我只是太害怕在我的内存中获得太大的文件并阻止其他进程等。
我也计划使用这种方法来上传真实附件(可能是 100 的 MB)。所以我以后会需要那个方法。
现在我只是不知道如何实现这一点,因为我有一个到邮件服务器的连接,并且我有一个到客户端的连接。我必须将数据传递给新的流或其他东西才能完成这项工作..
有人可以帮帮我吗?
编辑:澄清:不,我不能引用邮件服务器上的文件。我必须通过套接字将文件下载到服务器。
Edit2:http chuncked 可以解决吗?如果是的话,你能给我一个小例子吗?
【问题讨论】:
-
您需要支持什么样的客户端浏览器?他们支持 websocket 吗?本质上,您只是希望您的邮件服务器代理一个流,据我所知,这将是多么困难,部分取决于您的浏览器支持要求。
-
我不支持任何websocket(需要兼容IE 8、IE 9)。我可以以某种方式传递一个流并告诉控制器/响应从中读取 X 数量的字符吗?因为那会解决一切
-
要么是这样,要么只是让你的服务器充当反向代理(因此当客户端请求一个 URL 时,无需手动分块或诉诸套接字,即可一次性流回数据)。不幸的是,我对 ASP.NET 的了解还不够,无法进一步提供帮助。
-
你能给我举个例子吗?因为这听起来像是解决方案。然后我会这样做: Streamreader.read(data.amountofbytes) 并将其传递给新流并将该流作为新文件返回?
标签: c# asp.net-mvc asynchronous download