10

我正在使用 .NET 库函数将文件上传到服务器,并将文件路径作为参数。我要发送的数据很小并且在运行时构建。我可以将它保存到一个临时文件,然后上传。

由于我的应用程序将部署在各种环境中,并且我不知道是否能够可靠地创建临时文件,因此最好能够将路径传递到内存中的虚拟文件。

我不能改变图书馆;我知道它对文件执行以下操作:

LibraryUploadFunction(string filename) {
    fileName = Path.GetFullPath(fileName);
    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    ...
}

是否可以避免将文件写入磁盘?

谢谢

编辑:

库调用是 Webclient.UploadFile,正如答案中所指出的,有许多可能的解决方法,包括使用替代库,其中有很多。

4

3 回答 3

10

不,您的库在这方面从根本上不灵活,因为它使用FileStream.

选项:

  • 使用 ramdrive 并在其上指定路径,以避免实际撞击磁盘
  • 根据库的来源,请求更改(如果它是封闭源代码的)或者只是进行更改,如果它是开源的
  • 使用不同的库。(这个有什么特别之处?)
于 2013-05-03T13:23:10.970 回答
7

如果库公开了另一个接受 a 的方法Stream,您可以使用 a MemoryStream

如果它接受 a SafeFileHandle,您可以使用 a MemoryMappedFile

否则,您必须对磁盘上的文件感到满意。

于 2013-05-03T13:28:09.817 回答
2

如果我理解正确,您想使用其他WebClient.Upload*方法之一。例如,如果您将数据保存在 中byte[],请使用UploadData.

另一种选择是,如果要将数据作为流上传,请使用OpenWrite.

于 2013-05-03T14:01:25.140 回答