我有兴趣了解在Rails应用程序中处理大型文件上传的不同方法,2-5Gb文件.
据我所知,为了传输这种大小的文件,需要将其分解为更小的部分,我已经做了一些研究,这是我到目前为止所做的.
可以像FTP一样恢复所有这些方法,我不想使用FTP的原因是,如果可能的话,我想保留在网络应用程序中吗?我已经使用了carrierwave和paperclip,但我正在寻找能够恢复的东西,因为上传5Gb文件可能需要一些时间!
在我列出的这些方法中,我想说明哪些方法运作良好,如果还有其他方法可能会丢失?如果可能的话,没有插件,宁愿不使用Java Applets或Flash.另一个问题是这些解决方案在上传时将文件保存在内存中,这也是我希望尽可能避免的约束.
我有一个Web服务,它接受一个byte []并保存它.
这适用于"小"文件,但是一旦我达到一定的大小,Web服务就会失败并返回"请求失败,HTTP状态为404:未找到".
从我所看到的,这似乎是一个IIS设置,限制了可以发布的文件的大小(以防止拒绝服务攻击).我试图增加那个设置,但是我无法确定设置的位置和设置方式.我正在使用IIS7,而web服务是在.net(asmx)中完成的.
在Web服务的web.config中,我添加了以下内容(这似乎增加了可以接受的文件大小,但不是一直到这个设置大小)
<system.web>
<httpRuntime executionTimeout="999999" maxRequestLength="2097151" />
...
</system.web>
Run Code Online (Sandbox Code Playgroud)
有关增加Web服务的文件大小的位置(以及如何)的任何建议将非常感激.
我正在使用干净的架构开发 ASP.NET Core 3.1 API 项目,并且我有以下类库(层):
我希望能够将大文件上传到服务器(例如 2Gb 的文件大小甚至更大)并在此之后下载它们,并且希望在将来不会出现内存溢出和所有问题的情况下进行下载。
任何帮助,将不胜感激。
c# file-io large-file-upload asp.net-core asp.net-core-webapi
我尝试上传大文件(400mb +)到wildfly 8.1,我得到一个IOException但我在使用jboss 7服务器时没有遇到任何相同条件的异常:
例外:
Blocking request failed HttpServerExchange{ POST /ehub/contentstore/categories/maincategory/file/create}: java.lang.RuntimeException: java.io.IOException: Broken pipe
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:527)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:287)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method) [rt.jar:1.7.0_51]
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) [rt.jar:1.7.0_51]
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) [rt.jar:1.7.0_51]
at sun.nio.ch.IOUtil.write(IOUtil.java:51) [rt.jar:1.7.0_51]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487) [rt.jar:1.7.0_51]
at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:150) [xnio-nio-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.java:212)
at io.undertow.server.protocol.http.HttpResponseConduit.flush(HttpResponseConduit.java:629)
at io.undertow.conduits.FinishableStreamSinkConduit.flush(FinishableStreamSinkConduit.java:83)
at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:100)
at org.xnio.channels.Channels.flushBlocking(Channels.java:63) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:625)
at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:451) …Run Code Online (Sandbox Code Playgroud) 我正在考虑使用WCF进行一个项目,该项目需要人们能够将大文件(64MB-1GB)上传到我的服务器.我如何使用WCF处理此问题,可能还能恢复上传.
为了处理更大的客户群,我想通过WCF测试JSON.这将如何影响文件上传?可以从JSON完成,还是需要切换到上传部分的REST?
我一直在寻找使用其他数据上传大文件的方法,但似乎没有任何解决方案.要上传文件,我一直在使用这个代码,并且它与小文件一起正常工作:
with open("my_file.csv", "rb") as f:
files = {"documents": ("my_file.csv", f, "application/octet-stream")}
data = {"composite": "NONE"}
headers = {"Prefer": "respond-async"}
resp = session.post("my/url", headers=headers, data=data, files=files)
Run Code Online (Sandbox Code Playgroud)
问题是代码在发送之前加载整个文件,并且在上传大文件时会遇到MemoryError.我环顾四周,流式传输数据的方式是设置
resp = session.post("my/url", headers=headers, data=f)
Run Code Online (Sandbox Code Playgroud)
但我需要在数据中添加{"composite":"NONE"}.如果没有,服务器将无法识别该文件.
我需要通过Internet将大型二进制(2Gb-10Gb)数据从一台PC(客户端)发送到另一台PC(服务器).首先,我尝试使用带有消息安全性的wsHttpBinding绑定在IIS中托管的WCF服务,但是花了很多时间(几天)这对我来说是不合适的.现在我考虑使用套接字编写客户端和服务器应用程序.会更快吗?
最好的方法是什么?
谢谢
我想上传大文件(~10 - 100Mb wifi或移动网络),但在后台,因为用户可能会离开应用程序,稍后系统将关闭应用程序(如果不是enoguh内存)我为此创建了一个服务但我的问题是,当我杀死应用程序服务重新启动和上传再次开始.没有解决方案我发现了同样的问
所以它不起作用,但解决方案是什么?youtube app怎么样???
我试图了解将大文件从前端上传到服务器的最佳方法是什么。对于前端,我使用一个名为的库react-dropzone,它允许我获取我打算上传的文件的信息。我的上传组件看起来像这样:
// Node Modules
import React, {useCallback} from 'react';
import {useDropzone} from 'react-dropzone';
import {useTranslation} from 'react-i18next';
export default function Upload() {
// i18n
const [t] = useTranslation();
// React Dropzone
const onDrop = useCallback((droppedFiles) => {
console.log(droppedFiles);
}, []);
const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop});
return (
<div className="upload" {...getRootProps()}>
<input {...getInputProps()} />
{isDragActive ? (
<p>{t('DROP_FILES_HERE')}</p>
) : (
<p>{t('DRAG_AND_DROP_FILES_HERE_OR_CLICK_TO_SELECT_FILES')}</p>
)}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
这使我能够访问文件的内容,例如文件的名称、类型和大小(以字节为单位)。
这个库似乎也适用于更大的文件(100+ MB),但我的问题是当我想上传这个数据时如何调用这些数据?
我的一个想法是使用localStorage,但最大大小似乎约为5 到 10 MB。我也在Redux …
我一直在寻找一个好的方法,并把头撞在墙上。
在一个文件共享服务项目中,我被指派确定上传大文件的最佳方法。
在 stackoverflow 和其他论坛上搜索了很多问题后,我得到了以下结果:
增加脚本最大执行时间以及允许的最大文件大小
这个案子确实不太合适。每次通过普通宽带连接(1mbps-2mbps)上传文件时几乎都会超时。即使上传完成后执行PHP脚本,仍然不能保证上传不会超时。
分块上传。
虽然我有点明白我应该在这里做什么,但我感到困惑的是,假设正在上传一个 1GB 的文件,我正在以 2MB 的块读取它,但如果上传很慢, php 脚本执行将超时并给出错误。
使用 Java 和 Perl 等其他语言?
使用java或perl处理文件上传真的有效吗?
客户端使用的方法不是这里的问题,因为我们将发布一个客户端 SDK,并且可以在其中实现我们选择的方法。客户端和服务器端的实现都将由我们决定。
根据您的观点,考虑到内存使用效率应该很高,并且可能有很多并发上传,哪种方法应该是最好的方法?
Dropbox 和类似的云存储服务如何处理大文件上传并保持快速上传?
c# ×3
.net ×2
file-upload ×2
large-files ×2
upload ×2
wcf ×2
android ×1
apache ×1
asp.net-core ×1
bittorrent ×1
chunked ×1
file-io ×1
http ×1
iis-7 ×1
javascript ×1
json ×1
php ×1
python ×1
reactjs ×1
rest ×1
service ×1
web-services ×1
wildfly ×1