我想允许将非常大的文件上传到我们的PHP应用程序中(数百个megs - 8演出).然而,这有几个问题.
浏览器:
服务器:
要求:
我有一个Web应用程序,可以接受最多4 MB的文件上传.服务器端脚本是PHP,Web服务器是NGINX.许多用户要求大幅提高此限制以允许上传视频等.
然而,PHP的这个问题似乎没有简单的解决方案.首先,在客户端,我正在寻找允许我在传输过程中块文件的东西.SWFUpload似乎没有这样做.我想我可以使用Java FX流式传输上传(http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file),但我在PHP中找不到任何等效的request.getInputStream.
增加浏览器client_post限制或php.ini上传或max_execution
时间并不是真正大文件(~1GB)的真正解决方案,因为浏览器可能会超时并想到存储在内存中的所有blob.
有没有办法在服务器端使用PHP解决这个问题?谢谢你的回复.
我想读取一个非常大的文件的最后n行,而不是使用Java将整个文件读入任何缓冲区/内存区域.
我查看了JDK API和Apache Commons I/O,但无法找到适合此目的的API.
我在想UNIX中的尾部或更少的方式.我不认为他们加载整个文件,然后显示该文件的最后几行.在Java中也应该有类似的方法来做同样的事情.
我需要在Python中编写一个解析器,它可以在没有太多内存(仅2 GB)的计算机上处理一些非常大的文件(> 2 GB).我想在lxml中使用iterparse来做到这一点.
我的文件格式为:
<item>
<title>Item 1</title>
<desc>Description 1</desc>
</item>
<item>
<title>Item 2</title>
<desc>Description 2</desc>
</item>
Run Code Online (Sandbox Code Playgroud)
到目前为止我的解决方案是:
from lxml import etree
context = etree.iterparse( MYFILE, tag='item' )
for event, elem in context :
print elem.xpath( 'description/text( )' )
del context
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个解决方案仍然占用了大量的内存.我认为问题在于,在处理每个"ITEM"后,我需要做一些事情来清理空的孩子.在处理我的数据到正确清理之后,有人可以提供一些建议吗?
更新
我已经解决并删除了令人分心的错误.请阅读整篇文章,如果仍有问题,请随时留言.
背景
我试图使用Swift 2.0,GCD和完成处理程序在iOS上将相对较大的文件(视频)写入磁盘.我想知道是否有更有效的方法来执行此任务.在使用完成逻辑的同时,需要在不阻塞主UI的情况下完成任务,并确保尽可能快地执行操作.我有自定义对象与NSData属性,所以我目前正在尝试使用NSData上的扩展.作为示例,替代解决方案可能包括使用NSFilehandle或NSStreams以及某种形式的线程安全行为,这导致比基于当前解决方案的NSData writeToURL函数快得多的吞吐量.
NSData有什么问题吗?
请注意以下从NSData类参考(保存数据)中进行的讨论.我确实对我的临时目录执行写操作,但是我遇到问题的主要原因是我在处理大文件时可以看到UI明显滞后.这种滞后恰恰是因为NSData不是异步的(Apple Docs注意到原子写入会导致"大"文件的性能问题〜> 1mb).因此,在处理大型文件时,无论NSData方法中的内部机制是什么,都可以使用.
我做了一些挖掘,并从Apple发现了这个信息..."这个方法非常适合将数据:// URL转换为NSData对象,也可以用于同步读取短文件.如果你需要读取可能很大的文件,使用inputStreamWithURL:打开一个流,然后一次读取一个文件." (NSData类参考,Objective-C,+ dataWithContentsOfURL).这个信息似乎暗示我可以尝试使用流将文件写在后台线程上,如果将writeToURL移动到后台线程(由@jtbandes建议)是不够的.
NSData类及其子类提供了快速轻松地将其内容保存到磁盘的方法.为了最大限度地降低数据丢失的风险,这些方法提供了以原子方式保存数据的选项.原子写保证数据可以完整保存,也可以完全失败.原子写入从将数据写入临时文件开始.如果此写入成功,则该方法将临时文件移动到其最终位置.
虽然原子写操作可以最大限度地降低因文件损坏或部分写入而导致数据丢失的风险,但在写入临时目录,用户主目录或其他可公开访问的目录时,它们可能不合适.每次使用可公开访问的文件时,都应将该文件视为不受信任且可能存在危险的资源.攻击者可能会破坏或破坏这些文件.攻击者还可以使用硬链接或符号链接替换文件,从而导致写入操作覆盖或损坏其他系统资源.
在可公开访问的目录中工作时,避免使用writeToURL:atomically:方法(以及相关方法).而是使用现有文件描述符初始化NSFileHandle对象,并使用NSFileHandle方法安全地写入文件.
其他替代品
一个物品在objc.io上并发编程提供了有趣的选择"高级:文件I/O在后台".一些选项也涉及使用InputStream.Apple还有一些旧的参考文件,用于异步读取和写入文件.我发布这个问题是为了期待Swift的替代方案.
适当答案的示例
以下是可能满足此类问题的适当答案的示例.(用于流编程指南,写入输出流)
使用NSOutputStream实例写入输出流需要几个步骤:
我正在寻找最熟练的算法,适用于使用Swift,API或甚至C/ObjC将极大文件写入iOS就足够了.我可以将算法转换为适当的Swift兼容结构.
Nota Bene
我理解下面的信息错误.它包含完整性.这个问题是询问是否有更好的算法用于将大文件写入具有保证依赖序列的磁盘(例如NSOperation依赖).如果有请提供足够的信息(描述/样本为我重建相关的Swift 2.0兼容代码).如果我遗漏任何有助于回答问题的信息,请告知我们.
关于扩展名的说明
我已经在基本writeToURL中添加了一个完成处理程序,以确保不会发生意外的资源共享.我使用该文件的依赖任务永远不会面临竞争条件.
extension NSData {
func writeToURL(named:String, completion: (result: Bool, url:NSURL?) -> Void) {
let filePath = NSTemporaryDirectory() + named
//var success:Bool = false
let tmpURL = NSURL( fileURLWithPath: filePath )
weak var …
Run Code Online (Sandbox Code Playgroud) 我有大量的数据(几TB)并累积......它们包含在许多制表符分隔的平面文本文件中(每个大约30MB).大多数任务涉及读取数据并基于一系列谓词语句聚合(求和/平均+附加转换)观察/行,然后将输出保存为文本,HDF5或SQLite文件等.我通常使用R对于这样的任务,但我担心这可能有点大.一些候选解决方案是
(3)是个坏主意吗?我知道你可以在Python中包装C例程,但在这种情况下,因为没有任何计算上的限制(例如,需要许多迭代计算的优化例程),我认为I/O可能与计算本身一样是瓶颈.您对进一步的考虑或建议有什么建议吗?谢谢
编辑感谢您的回复.关于Hadoop的看法似乎存在冲突,但无论如何我都无法访问集群(虽然我可以使用几台未经网络的机器)......
我正在努力将Perl程序移植到Java,并且随时学习Java.原始程序的核心组件是Perl模块,它使用二进制搜索在+500 GB排序文本文件中执行字符串前缀查找(实质上,"搜索"到文件中间的字节偏移,回溯到最近的换行,比较带有搜索字符串的行前缀,"seek"到那个字节偏移的一半/两倍,重复直到找到...)
我已经尝试了几种数据库解决方案,但发现没有什么比这个大小的数据集纯粹的查找速度更好.您知道任何实现此类功能的现有Java库吗?如果做不到这一点,你能指出一些在文本文件中进行随机访问读取的惯用示例代码吗?
或者,我不熟悉新的(?)Java I/O库,但它是一个内存映射500 GB文本文件的选项(我在64位机器上,内存备用)并做二进制文件搜索内存映射的字节数组?我很想知道你必须分享的关于这个和类似问题的任何经验.
我必须解析php中的大型XML文件,其中一个是6.5 MB,它们甚至可能更大.正如我所读到的SimpleXML扩展,将整个文件加载到一个对象中,这可能效率不高.根据您的经验,最好的方法是什么?
我正在使用可写流编写node.js的大文件:
var fs = require('fs');
var stream = fs.createWriteStream('someFile.txt', { flags : 'w' });
var lines;
while (lines = getLines()) {
for (var i = 0; i < lines.length; i++) {
stream.write( lines[i] );
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个方案是否安全而不使用drain
事件?如果不是(我认为是这种情况),将任意大数据写入文件的模式是什么?
我有一些csv文件大于github的文件大小限制为100.00 MB.我一直在尝试使用Git Large File Storage扩展.
来自LFS - "Large file versioning- Version large files—even those as large as a couple GB in size—with Git."
我在关注的文件夹中应用了以下内容:
git lfs track "*.csv"
Run Code Online (Sandbox Code Playgroud)
但是,当我推:
remote: error: File Time-Delay-ftn/Raw-count-data-minor-roads1.csv is 445.93 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File Time-Delay-ftn/Raw-count-data-major-roads.csv is 295.42 MB; this exceeds GitHub's file size limit of 100.00 MB
Run Code Online (Sandbox Code Playgroud)
当我查看有问题的文件夹时:
-rw-r----- 1 user staff 42B 23 Oct 12:34 .gitattributes
-rw-r--r-- 1 user staff 1.3K 19 Oct 14:32 …
Run Code Online (Sandbox Code Playgroud)