我正在调用REST API,它接受Stream从本地设备上传文件,所以为此我现在使用以下代码从文件中获取Stream,而不是在上传后关闭该流:
var stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite);
上述方法的问题在于,在整个文件上传到服务器用户之前没有任何机会删除该文件,因为该文件的流是打开的,解决此问题的解决方案是什么?
答案 0 :(得分:1)
如果您的典型文件大小合适(并且我希望您不会将2GB +文件上传到REST API),您可以随时将流读入内存并在将其提供给API之前,像这样:
using (MemoryStream memoryStream = new MemoryStream())
{
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite)) {
fileStream.CopyTo(memoryStream);
}
memoryStream.Position = 0; // Reset to origin.
// Now use the MemoryStream as you would a FileStream:
api.Upload(memoryStream);
}
另一种方法是在硬盘上创建文件的临时副本并将其提供给API - 但是处理清理可能会变得有点麻烦。 FileOptions.DeleteOnClose
是你的朋友,可能已满足你的目的,但它仍然没有提供任何防弹保证。