如何为从 ByteString 创建的 HttpRequest/HttpEntity 设置块大小
How to set chunk size for HttpRequest/HttpEntity created from a ByteString
如果我想在 akka-http 中上传文件,我可以使用这样的方法来控制块大小:
private def createUploadRequest(streamName: String, uri: Uri, path: Path): Future[(HttpRequest, Path)] = {
val bodyPart = FormData.BodyPart.fromPath("data", ContentTypes.`application/octet-stream`, path, chunkSize)
val body = FormData(bodyPart)
Marshal(body).to[RequestEntity].map { entity =>
HttpRequest(method = HttpMethods.POST, uri = uri, entity = entity) -> path
}
}
但是,如果我只有一个包含内容的 ByteString 并想上传它,我无法控制块大小:
private def makeHttpRequest(streamName: String, serverInfo: ServerInfo, bs: ByteString): HttpRequest = {
HttpRequest(
HttpMethods.POST,
s"http://${serverInfo.host}:${serverInfo.port}$distRoute/$streamName",
entity = HttpEntity(ContentTypes.`application/octet-stream`, bs)
)
}
在从 ByteString 创建 HttpEntity 时,还有什么方法可以控制块大小吗?
创建一个Chunked
entity instead of using the HttpEntity.apply
方法:
import akka.http.scaladsl.model.HttpEntity.Chunked
import akka.http.scaladsl.model.HttpEntity.ChunkStreamPart
type ChunkSize = Int
val chunkedEntityFromByteString : ChunkSize => ByteString => Entity =
chunkSize => byteString =>
Chunked(
ContentTypes.`application/octet-stream`,
Source
.fromIterator(() => byteString sliding chunkSize)
.map(ChunkStreamPart.apply)
)
只是对已发布的解决方案进行了较小的更正以使其可以编译:
type ChunkSize = Int
val chunkedFromByteString : ChunkSize => ByteString => HttpEntity =
chunkSize => byteString =>
Chunked(
ContentTypes.`application/octet-stream`,
Source
.fromIterator(() => byteString sliding chunkSize)
.map(ChunkStreamPart.apply)
)
如果我想在 akka-http 中上传文件,我可以使用这样的方法来控制块大小:
private def createUploadRequest(streamName: String, uri: Uri, path: Path): Future[(HttpRequest, Path)] = {
val bodyPart = FormData.BodyPart.fromPath("data", ContentTypes.`application/octet-stream`, path, chunkSize)
val body = FormData(bodyPart)
Marshal(body).to[RequestEntity].map { entity =>
HttpRequest(method = HttpMethods.POST, uri = uri, entity = entity) -> path
}
}
但是,如果我只有一个包含内容的 ByteString 并想上传它,我无法控制块大小:
private def makeHttpRequest(streamName: String, serverInfo: ServerInfo, bs: ByteString): HttpRequest = {
HttpRequest(
HttpMethods.POST,
s"http://${serverInfo.host}:${serverInfo.port}$distRoute/$streamName",
entity = HttpEntity(ContentTypes.`application/octet-stream`, bs)
)
}
在从 ByteString 创建 HttpEntity 时,还有什么方法可以控制块大小吗?
创建一个Chunked
entity instead of using the HttpEntity.apply
方法:
import akka.http.scaladsl.model.HttpEntity.Chunked
import akka.http.scaladsl.model.HttpEntity.ChunkStreamPart
type ChunkSize = Int
val chunkedEntityFromByteString : ChunkSize => ByteString => Entity =
chunkSize => byteString =>
Chunked(
ContentTypes.`application/octet-stream`,
Source
.fromIterator(() => byteString sliding chunkSize)
.map(ChunkStreamPart.apply)
)
只是对已发布的解决方案进行了较小的更正以使其可以编译:
type ChunkSize = Int
val chunkedFromByteString : ChunkSize => ByteString => HttpEntity =
chunkSize => byteString =>
Chunked(
ContentTypes.`application/octet-stream`,
Source
.fromIterator(() => byteString sliding chunkSize)
.map(ChunkStreamPart.apply)
)