byte[] bytes = new byte[uploader.UploadedFiles[0].InputStream.Length];
uploader.UploadedFiles[0].InputStream.Read(bytes, 0, bytes.Length);
var storedFile = new document();
string strFullPath = uploader.UploadedFiles[0].FileName;
string strFileName = Path.GetFileName(strFullPath);
storedFile.document_id = Guid.NewGuid();
storedFile.content_type = uploader.UploadedFiles[0].ContentType;
storedFile.original_name = strFileName;
storedFile.file_data = bytes;
storedFile.date_created = DateTime.Now;
db.documents.InsertOnSubmit(storedFile);
db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
如果:
在对 Read 的单个调用中从流中读取是非常危险的。您假设所有数据都将立即可用,但情况并非总是如此。您应该始终循环阅读,直到没有更多数据为止。
我应该如何更改上面的代码以使其“不那么危险”?
我从我的 C# 代码调用一个 API,它有一个带有以下标头的方法
public void ExternalFactory.SetOut(TextWriter outputStream)
Run Code Online (Sandbox Code Playgroud)
我通常称这种方法为
ExternalFactory.SetOut(Console.Out)
Run Code Online (Sandbox Code Playgroud)
只需让 API 将其所有信息写入控制台。但是,除了写入控制台之外,我还想将此信息存储在更永久的位置,例如文本文件。
我的第一个猜测是我需要创建某种客户 TextWriter 来拆分流并将一个发送到控制台,一个发送到 StreamWriter。这里的正确方法是什么?
可能的重复:
创建图像而不将其存储为本地文件
我需要用 gd 创建一个图像,然后用 php 中的 curl 将它上传到另一个服务器。
所以我遇到了一个问题:gd 图像资源不能用作 curl 的文件流资源。
有没有办法将gd图像资源制作成文件流资源?
- 更新 -
本地磁盘不可写。
我有一个文本文件,其中包含我要解析的固定长度表。但是,文件的开头是有关何时生成此表的一般信息(IE 时间、数据等)。
为了阅读此内容,我尝试创建一个FileStream,然后使用 . 读取该文件的第一部分StreamReader。我从文档的顶部解析出我需要的内容,然后当我完成时,将流的位置设置为结构化数据的第一行。
然后我将 a 附加TextFieldParser到流(使用固定长度表的适当设置),然后尝试读取该文件。在第一行,它失败了,在ErrorLine属性中,它列出了表第三行的后半部分。我浏览了一下,发现它位于第一行,但ErrorLine酒店却暗示情况并非如此。
调试时,我发现如果在StreamReader.ReadLine()将其附加TextFieldParser到流后尝试使用我的方法,前两行显示正常。然而,当我阅读第三行时,它返回一行,该行从第三行的前半部分开始(并在文本所在的位置停止ErrorLine)附加文档中稍后的部分内容。如果我在附加之前尝试此操作TextFieldParser,它会很好地读取所有 3 行。
我有一种感觉,这与我将 2 个读者绑定到同一个流有关。我不知道如何使用结构化部分和非结构化部分来阅读此内容,而不只是自己标记这些行。我可以做到这一点,但我假设我不是第一个想要以一种方式读取流的一部分,并以另一种方式读取流的后续部分的人。
为什么会这样跳过,如何读取不同格式的文本文件?
例子:
Date: 3/1/2013
Time: 3:00 PM
Sensor: Awesome Thing
Seconds X Y Value
0 5.1 2.8 55
30 4.9 2.5 33
60 5.0 5.3 44
Run Code Online (Sandbox Code Playgroud)
为这个简化示例定制的代码:
Boolean setupInfo = true;
DataTable result = new DataTable();
String[] fields;
Double[] dFields;
FileStream stream = File.Open(filePath,FileMode.Open);
StreamReader reader = new …Run Code Online (Sandbox Code Playgroud) 我正在处理流,有时我需要更新Position流的。但正如您所知,在某些情况下,这不受支持。例如,当您像我一样从 Web 服务获取流时 :)
如果给定的Stream对象接受Position更新,我在这里寻找的是一种正确的检查方法。
有3个字段,它看起来像要上班,CanRead,CanSeek,CanWrite。但是我无法通过查看此处对这些字段的 msdn 解释来决定。请帮帮我。
HSL流被分成多个ts文件,现在我想通过调用ffmpeg API将这些文件和m3u8文件在源代码中保存到本地磁盘。
ffmpeg 支持这个功能吗?如果是,如何实现该功能?否则,谁能给我一些关于如何实现这一目标的建议?
我正在使用Kafka流,并希望将Java的一些使用者偏移量重置为开始。
KafkaConsumer.seekToBeginning(...)听起来像是正确的事情,但是我使用Kafka Streams:
KafkaStreams streams = new KafkaStreams(builder, props);
...
streams.start();
Run Code Online (Sandbox Code Playgroud)
我想根据我定义的具体流管道,这将在引擎盖下创建多个消费者。我可以访问那些吗?还是有其他方法以编程方式重置偏移量?
我试图过滤子文档.
样本记录:
[Document{{_id=597608aba213742554f537a6, upp_id=, content_id=597608aba213742554f537a3, idmapping=Document{{ptype=PDF, clientid=12345, normalizedclientid=12345, systeminstanceid=, sourceschemaname=, platforminternalid=0987654321}}, batchid=null, locale=en_US}}]
Run Code Online (Sandbox Code Playgroud)
我需要使用idmapping.ptype = PDF进行过滤
MongoCursor<Document> cursor = mailboxitemCollection.find(whereClause).iterator();
List<Document> documentList = new ArrayList<Document>();
while (cursor.hasNext()) {
Document object = cursor.next();
documentList.add(object);
}
List<Document> outList = documentList.stream()
.filter(p -> p.getInteger(CommonConstants.VISIBILITY) == 1
&& (!StringUtils.isEmpty(req.ptype())? (p.getString("idmapping.ptype").equalsIgnoreCase(req.ptype())) : true)
).parallel().sequential().collect(Collectors.toCollection(ArrayList::new));
System.out.println(outList);
System.out.println(outList.size());
Run Code Online (Sandbox Code Playgroud)
我得到Null Point异常,无法从List documentList中读取sub/embed文档.
先感谢您!Bharathi
我有一个带有cmd命令转发输出的文件.AC程序循环遍历字符,直到它到达文件末尾.但不幸的是,在文件实际结束之前,文件中有一些EOF指示符.该文件的内容是:
Abbildname PID Sitzungsname Sitz.-Nr. Speichernutzung
========================= ======== ================ =========== ===============
System Idle Process 0 Services 0 8 K
System 4 Services 0 5ÿ744 K
smss.exe 440 Services 0 276 K
csrss.exe 616 Services 0 1ÿ924 K
wininit.exe 720 Services 0 944 K
services.exe 792 Services 0 7ÿ892 K
lsass.exe 800 Services 0 14ÿ300 K
svchost.exe 924 Services 0 420 K
fontdrvhost.exe 952 Services 0 680 K
svchost.exe 960 Services 0 23ÿ880 K
WUDFHost.exe 1012 Services 0 7ÿ416 K
svchost.exe …Run Code Online (Sandbox Code Playgroud) 我有一个用Java编写的servlet,它接受多部分形式的发布文件,该文件需要保存在MongoDb / GridFS中。我已经有为此工作的代码。
这是一个代码片段,显示了如何使用org.apache.commons.fileupload包完成此操作。它几乎不占用内存,因为它不会在内存中保留太多数据。
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(req);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
toProcess.put(name, Streams.asString(stream));
} else {
String fileName = item.getName();
String contentType = item.getHeaders().getHeader("Content-Type");
GridFSUploadOptions options = new GridFSUploadOptions()
// .chunkSizeBytes(358400)
.metadata(new Document("content_type", contentType));
ObjectId fileId = gridFSFilesBucket.uploadFromStream(fileName, stream, options);
fileIds.add(fileId);
fileNames.add(fileName);
}
Run Code Online (Sandbox Code Playgroud)
我还需要计算所有文件的sha1哈希值。阿帕奇digestutils可以用于此目的。它具有一种可以计算流中的sha1的方法:
我的问题是此方法完全消耗了流。我需要将输入流分为两部分。将一部分输入到SHA-1计算中,另一部分输入到GridFS存储桶中。
我怎样才能做到这一点?我当时正在考虑创建自己的“管道”,该管道具有输入和输出流,可以转发所有数据,但可以实时更新摘要。
我只是不知道如何开始写这样的管道。
stream ×10
c# ×4
java ×3
apache-kafka ×1
asp.net ×1
batch-file ×1
c ×1
cmd ×1
consumer ×1
digest ×1
ffmpeg ×1
filestream ×1
fixed-width ×1
gd ×1
io ×1
java-8 ×1
java-stream ×1
mongodb ×1
offset ×1
php ×1
record ×1
resources ×1
sql ×1
streaming ×1
streamreader ×1