我正在编写一个Web浏览器应用程序(客户端),它从许多位置下载大量的块并加入它们来构建blob.然后该blob作为公共文件保存到本地文件系统.我这样做的方式是使用ArrayBuffer对象和blob.
var blob = new Blob([ArrayBuffer1, ArrayBuffer2, ArrayBuffer3, ...], {type: mimetype})
这适用于中小型文件(直到700 MB aprox),但浏览器崩溃时文件较大.我知道RAM内存有其局限性.情况是我需要构建blob以生成文件,但我想让用户下载比这个大得多的文件(想象一下,例如,大约8GB的文件).
¿如何构建blob以避免大小限制?LocalStorage比RAM更受限制,因此我不知道该使用什么或如何使用它.
我有一些文件存储在Oracle 9的数据库blob列中.
我想将这些文件存储在文件系统中.
这应该很简单,但我找不到合适的剪辑.
我怎么能在java中这样做?
PreparedStatement ptmst = ...
ResutlSet rs = pstmt.executeQuery();
rs.getBlob();
// mistery
FileOutputStream out = new FileOutputStream();
out.write(); // etc et c
Run Code Online (Sandbox Code Playgroud)
我知道它应该是类似的东西...我不知道是什么评价为谜
谢谢
编辑
我终于得到了大卫的问题.
这是我懒惰的实现:
PreparedStatement pstmt = connection.prepareStatement("select BINARY from MYTABLE");
ResultSet rs = pstmt.executeQuery();
while( rs.next() ) {
Blob blob = rs.getBlob("BINARY");
System.out.println("Read "+ blob.length() + " bytes ");
byte [] array = blob.getBytes( 1, ( int ) blob.length() );
File file = File.createTempFile("something-", ".binary", new File("."));
FileOutputStream out = new …Run Code Online (Sandbox Code Playgroud) 是否可以在Transact-SQL的varbinary(max)列中插入文件?如果是的话,我会很高兴有一个代码片段,至少让我知道如何做到这一点.
谢谢
是否有可以为每次提交输出的git命令:
git ls-tree -l -r <commit>创建的blob (仅限于创建的blob)我有一个设计决定,我正在寻找一些最佳实践建议.我有一个java程序,需要在MySQL数据库中存储大量(每天几百个)浮点数组.数据是一个长度Double为300 的固定长度数组.我可以看到三个合理的选项:
我还要提一下,这些数据将被频繁地读取和更新.
我想使用BLOB,因为这是我过去所做的,它似乎是最有效的方法(例如,保持固定宽度,不需要转换为逗号分隔的字符串).然而,我的同事坚持认为我们应该序列化和使用varchar,原因似乎主要是教条.
如果其中一种方法比另一种更好,那么Java或MySQL的具体原因是什么?
我试图将图像存储在DataBase中,由于某种原因它似乎不起作用.这是我桌子的结构.
mysql> describe ImageStore;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| ImageId | int(11) | NO | PRI | NULL | |
| Image | longblob | NO | | NULL | |
+---------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
这是我的查询插入图像或至少这应该是什么:
//Store the binary image into the database
$tmp_img = $this->image['tmp_name'];
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)
如果我打印file_get_contents($ tmp_image)的值,那么屏幕上会有大量数据.但是这个值并没有存储在数据库中,这就是我所面临的问题.
我们有一个MySQL InnoDB表,包含~10列小base64编码的javascript文件和png(<2KB大小)图像base64编码.
相对较少的插入和大量读取,但是输出被缓存在Memcached实例上几分钟以避免后续读取.
现在我们正在使用BLOB这些列,但我想知道TEXT在性能或快照备份方面是否有转换到数据类型的优势.
我的搜索挖掘表明,BLOB和TEXT我的情况接近相同的,因为我不知道前手什么类型的数据实际上将被存储我去了BLOB.
对于这个具体案例,你对TEXT vs BLOB辩论有什么指示吗?
我只在谷歌Chrome和Chromium上遇到了一个非常奇怪的问题.
背景是:
我使用多部分上传方法将文件上传到我的服务器,这意味着我将文件分成10mb的块并将每个块发送到服务器.这在所有具有任何大小的文件的浏览器中都可以完美地工作,当我需要加密每个块时问题就开始了.
对于加密我使用CryptoJS,并且在上传块之前,我加密它并获得结果Blob上传,当我必须上传少于50个块(50个blob,总共约500mb)时,这在Chrome上正常工作,之后我得到a POST http://(...) net::ERR_FILE_NOT_FOUND.
奇怪的是,这适用于所有其他浏览器,包括Opera,现在基本上是Chrome,除了Chrome和Chromium.我在IE,Firefox,Edge,Safari,Opera,Chrome和Chromium上测试过它.
下面你可以看到我的代码如何工作所以你们可以有一个想法,这不是我在应用程序中使用的真实代码,而是,它是我编写的测试代码产生相同的结果.
而不是获取文件的片段(File.slice)我将作为一个块上传并加密它以获得它blob,我将生成一个伪造blob我的块的大小.我用它setTimeout来模拟加密blob所需的时间.就像我之前说的那样,通过这样做,我得到了与我的真实代码相同的结果:
function uploadNext(prevResponse) {
if (currentPart == totalPartsFile)
return;
//var chunk = getNextChunk();
var totalSize = file.size;
setTimeout(function() {
var blob = new Blob([new ArrayBuffer(constants.chunkSize)], {
type: 'application/octet-string',
name: file.name
});
console.log(blob);
blob.encrypted = true;
blob.key = encryptionKey;
blob.mimeType = file.mimeType;
blob.name = file.name;
blob.originalFileSize = originalFileSize || file.size;
uploadFile(objectId, currentPart, blob, totalSize, prevResponse, function(resp) {
uploadNext(resp);
});
}, 1000); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Angular 5 应用程序。我必须从我的后端应用程序下载一个文件,为此我只需调用如下函数:
public executeDownload(id: string): Observable<Blob> {
return this.http.get(this.replaceUrl('app/download', denunciaId), {responseType: 'blob'}).map(result => {
return result;
});
}
Run Code Online (Sandbox Code Playgroud)
并调用我刚刚调用的下载服务:
public onDownload() {
this.downloadService.executeDownload(this.id).subscribe(res => {
saveAs(res, 'file.pdf');
}, (error) => {
console.log('TODO', error);
// error.error is a Blob but i need to manage it as RemoteError[]
});
}
Run Code Online (Sandbox Code Playgroud)
当后端应用程序处于特定状态时,它不会返回 Blob,而是返回一个HttpErrorResponse在其error字段中包含RemoteError 数组的对象。RemoteError 是我编写的用于管理远程错误的接口。
在 catch 函数中,error.error 是一个 Blob。如何将 Blob 属性转换为RemoteError[]?
提前致谢。
我需要从我的后端下载一个excel,它返回一个文件.
当我提出请求时,我收到错误:
TypeError:您提供了"undefined",其中包含了一个流.您可以提供Observable,Promise,Array或Iterable.
我的代码是:
this.http.get(`${environment.apiUrl}/...`)
.subscribe(response => this.downloadFile(response, "application/ms-excel"));
Run Code Online (Sandbox Code Playgroud)
我试过get和map(...)但是没有用.
细节:角度5.2
引用:
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/finally';
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch';
Run Code Online (Sandbox Code Playgroud)
内容 - 响应类型:
Content-Type: application/ms-excel
Run Code Online (Sandbox Code Playgroud)
怎么了?