Index: pkg/http/lib/src/multipart_file.dart |
diff --git a/pkg/http/lib/src/multipart_file.dart b/pkg/http/lib/src/multipart_file.dart |
index 70a0c576e4f113f0b984540e7dfaf2938fb60031..a0b50cb4fa0b2d596161ad715f9d49f3c54df505 100644 |
--- a/pkg/http/lib/src/multipart_file.dart |
+++ b/pkg/http/lib/src/multipart_file.dart |
@@ -7,6 +7,7 @@ library multipart_file; |
import 'dart:async'; |
import 'dart:io'; |
+import 'byte_stream.dart'; |
import 'utils.dart'; |
/// A file to be uploaded as part of a [MultipartRequest]. This doesn't need to |
@@ -16,7 +17,7 @@ class MultipartFile { |
final String field; |
/// The size of the file in bytes. This must be known in advance, even if this |
- /// file is created from an [InputStream]. |
+ /// file is created from a [ByteStream]. |
final int length; |
/// The basename of the file. May be null. |
@@ -26,21 +27,22 @@ class MultipartFile { |
final ContentType contentType; |
/// The stream that will emit the file's contents. |
- final InputStream _stream; |
+ final ByteStream _stream; |
/// Whether [finalize] has been called. |
bool get isFinalized => _isFinalized; |
bool _isFinalized = false; |
- /// Creates a new [MultipartFile] from an [InputStream]. The length of the |
- /// file in bytes must be known in advance. If it's not, read the data from |
- /// the stream and use [MultipartFile.fromBytes] instead. |
+ /// Creates a new [MultipartFile] from a chunked [Stream] of bytes. The length |
+ /// of the file in bytes must be known in advance. If it's not, read the data |
+ /// from the stream and use [MultipartFile.fromBytes] instead. |
/// |
/// [contentType] currently defaults to `application/octet-stream`, but in the |
/// future may be inferred from [filename]. |
- MultipartFile(this.field, this._stream, this.length, |
+ MultipartFile(this.field, Stream<List<int>> stream, this.length, |
{this.filename, ContentType contentType}) |
- : this.contentType = contentType != null ? contentType : |
+ : this._stream = toByteStream(stream), |
+ this.contentType = contentType != null ? contentType : |
new ContentType("application", "octet-stream"); |
/// Creates a new [MultipartFile] from a byte array. |
@@ -49,9 +51,7 @@ class MultipartFile { |
/// future may be inferred from [filename]. |
factory MultipartFile.fromBytes(String field, List<int> value, |
{String filename, ContentType contentType}) { |
- var stream = new ListInputStream(); |
- stream.write(value); |
- stream.markEndOfStream(); |
+ var stream = new ByteStream.fromBytes(value); |
return new MultipartFile(field, stream, value.length, |
filename: filename, |
contentType: contentType); |
@@ -87,16 +87,17 @@ class MultipartFile { |
{String filename, ContentType contentType}) { |
if (filename == null) filename = new Path(file.name).filename; |
return file.length().then((length) { |
- return new MultipartFile(field, file.openInputStream(), length, |
+ var stream = wrapInputStream(file.openInputStream()); |
+ return new MultipartFile(field, stream, length, |
filename: filename, |
contentType: contentType); |
}); |
} |
// Finalizes the file in preparation for it being sent as part of a |
- // [MultipartRequest]. This returns an [InputStream] that should emit the body |
+ // [MultipartRequest]. This returns a [ByteStream] that should emit the body |
// of the file. The stream may be closed to indicate an empty file. |
- InputStream finalize() { |
+ ByteStream finalize() { |
if (isFinalized) { |
throw new StateError("Can't finalize a finalized MultipartFile."); |
} |