问题标签 [sendfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
906 浏览

c++ - linux-aio 可以进行类似 sendfile() 的操作吗?

我想通过 linux-aio 将数据从一个文件描述符发送到另一个文件描述符,而无需缓冲,也无需将数据传入和传出用户空间。linux-aio 可以实现这样的 sendfile64() 功能吗?

我查看了一些 linux-aio 示例(在 C/C++ 中)和简单的文件复制程序。所有这些示例都在读取 -> 缓冲区 -> 写入。

问候,菲利普

0 投票
2 回答
1312 浏览

ruby-on-rails - Rails 4,资产管道导致用户可下载文件被下载两次

我的应用程序目录中有一个名为“uploads”的文件夹,用户可以在其中上传文件和下载文件。我不希望上传文件夹位于公共目录中,因为我想控制下载授权。

在我的控制器中,我有:

这实际上工作正常。问题是当我在生产服务器上时,当我运行 rake assets:precompile 并且有一个 assets 目录时,文件会下载两次。第一次下载文件时,浏览器表现得好像什么都没有发生(没有加载旋转),但我在 Google Chrome 网络开发人员的网络选项卡中看到数据正在传输。然后在下载文件后,会出现一个提示,询问用户是否要下载文件。

删除公共目录中的资产文件夹可以解决这个问题,但我想使用资产管道。我还尝试将资产管道要求从 require_tree 更改为 require_directory。

有谁知道如何让 send_file 与资产管道正常工作?

谢谢。

0 投票
2 回答
119 浏览

c# - 在 C# 中发送文件可编程性

您将如何检测、阻止或只是泛指您可以对 Windows 上的任何文件/文件夹执行的发送文件操作。当发送文件发生时究竟发生了什么,.NET 中是否有任何内置的可编程性,或者它是否类似于移动的工作方式(它首先被删除,然后在新位置创建。)

我只想知道是否有任何方法可以检测发送文件何时发生或执行发送文件时窗口对文件/文件夹做了什么。

0 投票
2 回答
227 浏览

ruby-on-rails - Rails 下载 http 响应/显示站点

我不想在浏览器中显示由 index.api.rsb 文件呈现的 xml 文件,而是想下载它。对我来说,这听起来很简单,但我找不到解决方案。

我在控制器方法中尝试了以下内容:

结果是 MissingFile 异常...

提前致谢

0 投票
1 回答
1606 浏览

ruby-on-rails - 下载 Rails 资产 - 开发与生产中的文件路径

我有downloads_controller.rb一个单一的download操作,我想触发一个文件的下载,该文件位于一个名为的文件夹中,该文件夹downloads位于一个名为的文件夹download_assets中,我已添加到我的资产路径中。

我可以使用以下方法成功访问文件夹中的任何文件:

http://my-app.dev/assets/downloads/file.pdf

为了使用 send_file 我需要该文件的文件系统路径而不是 URL。我可以使用 获取我的 Rails 项目根目录的Rails.root路径,使用 获取文件的路径asset_path(path)。但是,问题是因为我正在开发中,所以这个路径没有文件。该文件存储在:

那个行动:

为了让它在开发中工作,我需要使用以下内容:

但是,这将在生产中失败,因为资产将被预编译并移动到assets.

我目前的解决方法是:

是否有替代方法可以根据环境提供不同的路径,因为这看起来很脆弱?

0 投票
2 回答
4915 浏览

linux - 将大数据写入套接字时最小化副本

我正在编写一个处理图像(大数据)的应用程序服务器。在将图像数据发送回客户端时,我试图最小化副本。我需要发送给客户端的已处理图像位于从 jemalloc 获得的缓冲区中。我想到将数据发送回客户端的方法是:

1)简单的写调用。

2)我通过mmap而不是jemalloc获取缓冲区,尽管我认为jemalloc已经使用mmap创建了缓冲区。然后我打了一个简单的电话来写。

3)我像以前一样通过mmap获得一个缓冲区。然后我使用 sendfile 发送数据:

看起来(1)和(2)可能会做同样的事情,因为 jemalloc 可能首先通过 mmap 分配内存。不过,我不确定(3)。这真的会带来任何好处吗?本文关于 Linux 零复制方法的图 4表明,可以使用 sendfile 防止进一步的复制:

没有数据被复制到套接字缓冲区中。相反,只有带有数据位置和长度信息的描述符被附加到套接字缓冲区。DMA 引擎将数据直接从内核缓冲区传递到协议引擎,从而消除了剩余的最终副本。

如果一切顺利,这似乎是一场胜利。我不知道我的映射缓冲区是否算作内核缓冲区。我也不知道什么时候可以安全地重新使用这个缓冲区。由于 fd 和 length 是唯一附加到套接字缓冲区的内容,因此我假设内核实际上将此数据异步写入套接字。如果确实如此, sendfile 的返回意味着什么?我怎么知道什么时候重新使用这个缓冲区?

所以我的问题是:

  1. 将大缓冲区(在我的情况下为图像)写入套接字的最快方法是什么?图像保存在内存中。
  2. 在映射文件上调用 sendfile 是个好主意吗?如果是,有什么问题?这甚至会导致任何胜利吗?
0 投票
1 回答
191 浏览

c - 如何多次复制文件以在C中连续制作更大的文件

我需要制作许多大小不一的大型文本文件,精确到兆字节的倍数(换句话说,正好是 10 MB、50 MB、100 MB,而且我不确定我必须要多大)。

我不希望文件全部为 1 或 0,因此我有一个大约 10 MB 的文本文件,并且我想根据需要多次复制该文本以制作我的文件。

我已经看到使用 sendfile 而不是 read() 和 write() 的建议。我写了一些东西,可以从我的 10MB 文件中创建一个 1MB 文件,但是我想知道一旦我点击 EOF 以创建一个超过 10MB 的文件,我该如何循环。

这最终将在 Linux 计算机上使用,但我现在用 C 语言的 Cygwin (Windows) 编写它。

0 投票
1 回答
369 浏览

haskell - Haskell sendFile 函数

在哪里可以找到 sendFile 函数(Network.Socket.SendFile lib)的一些实际示例。当我尝试按照官方手册进行所有操作时,出现错误:

它是函数使用的一些简单的例子吗?

这里是来源:

0 投票
2 回答
806 浏览

download - 如何从流星中的不同目录向客户端浏览器提供或强制文件下载

一个用户来到我的站点并输入一些东西,我的站点生成一个文件作为输出。

不幸的是,我无法将生成的文件放在公共目录中——因为你们现在 Meteor 都会看到这个并在每次更改公共文件夹内容时重新启动。

所以我生成的文件位于 .meteor/local/build/programs/server/files

例如,我有位于该目录中的 document.pdf,我想向我的客户的浏览器提供/强制/触发文件下载,让他的浏览器下载这个 document.pdf 文件。

0 投票
0 回答
446 浏览

vb.net - 使用套接字 vb.net 发送 multing 大文件

我正在编写一个关于局域网聊天的应用程序,我想用同一个端口同步发送 multing 文件,现在该怎么办?我只能发送带有案例 1 文件 1 端口的 multing 文件 :( 请帮助我,谢谢。