File 水晶:多部件碎片罐';I don’我没有读到我的信
我正试图从multipart的io向文件写入字节,但由于某种原因,该文件已关闭File 水晶:多部件碎片罐';I don’我没有读到我的信,file,io,crystal-lang,File,Io,Crystal Lang,我正试图从multipart的io向文件写入字节,但由于某种原因,该文件已关闭 buffer = uninitialized UInt8[2048] File.open( "#{Config::Application::PUBLIC_DIR}/#{file_name}", "w+") do |_file| p "is closed?: #{uploaded_file_io.closed?}" #=> true if (read_bytes_length = upl
buffer = uninitialized UInt8[2048]
File.open( "#{Config::Application::PUBLIC_DIR}/#{file_name}", "w+") do |_file|
p "is closed?: #{uploaded_file_io.closed?}" #=> true
if (read_bytes_length = uploaded_file_io.read(buffer.to_slice)) > 0
_file.write( buffer.to_slice[0, read_bytes_length] )
end
end
创建了一个空文件,我可以在目录中看到它,但当我尝试写入它时,流就关闭了(当从多部分IO::Delimeterd读取时)
我做错了什么
另外,如果你知道一些使用IO或Crystal中文件的指南,请分享
编辑:
上传的_文件_io是从rx14/multipart中删除的io::Delimetered,它被分配到HTTP::FormData.parse块中,该块产生如下结果:
HTTP::FormData.parse(request) do |field, io, meta, headers|
#that class simply has properties, and is to store what's passed
value_to_return[field] = MultipartFileWrapper.new(io: io, meta: meta, headers: headers)
end
#later:
uploaded_file_io = value_to_return["file"].io
如果不知道什么是
上传的\u文件\u io
以及它是如何产生的(在上面的代码段中从未初始化),就不可能给你任何帮助。我已经更新了这个问题,以显示上传的\u文件\u io是如何初始化的。我想一旦你离开这个区块,io会自动为你关闭。此注释似乎还表明:(解析器由FormData使用)。您可能应该在块内完成所有处理。