В Firefox (http / https) или Chrome / Safari (http) Я могу скачать его без проблем.
Код для сохранения:
saveBase64BinaryFile(SaveBinaryFile.builder()
.namespace("namespace")
.fileName(s"Schët-faktura_№143_ot_21_fevralya_2020.pdf")
.contentType("application/pdf; charset=utf-8")
.data(getFile)
.build())
def saveBase64BinaryFile(cmd: SaveBinaryFile)(implicit context: Context): Future[FileInfo] =
upload(
namespace = cmd.getNamespace,
fileName = cmd.getFileName,
src = Source.fromFuture(Future.successful(ByteString(cmd.getData))),
contentType = cmd.getContentType
)
def upload(namespace: String, fileName: String, src: Source[ByteString, Any], contentType: String = null) = Future({
val inputStream = src.runWith(StreamConverters.asInputStream())
val fileId = UUID.randomUUID().toString
val meta = new ObjectMetadata
val bytes = IOUtils.toByteArray(inputStream)
meta.setContentLength(bytes.length)
meta.setUserMetadata(Map(
FileNameHeader → Base64.getEncoder.encodeToString(fileName.getBytes(Charsets.UTF_8)),
ContentTypeHeader → contentType,
).asJava)
s3Client.putObject(bucketName, s3Path(namespace, fileId), new ByteArrayInputStream(bytes), meta)
FileInfo.builder()
.fileId(fileId)
.size(meta.getContentLength)
.contentType(contentType)
.name(fileName)
.build()
})(blockEc)
Код для загрузки:
def download(namespace: String, fileId: String): Future[(FileInfo, InputStream)] = Future({
val obj = try s3Client.getObject(bucketName, s3Path(namespace, fileId)) catch {
case e: AmazonS3Exception if e.getStatusCode == 404 ⇒ throw new NotFoundError("File not found!")
}
val fileName = obj.getObjectMetadata.getUserMetadata.get(FileNameHeader) match {
case null ⇒ "file"
case encoded ⇒ new String(Base64.getDecoder.decode(encoded), Charsets.UTF_8)
}
(FileInfo.builder()
.fileId(fileId)
.name(fileName)
.size(obj.getObjectMetadata.getContentLength)
.contentType(obj.getObjectMetadata.getUserMetadata.getOrDefault(ContentTypeHeader, null))
.build(),
obj.getObjectContent)
})(blockEc)
Результат при попытке открыть ссылку на файл из Chrome / Safari:
Этот сайт недоступен
Веб-страница на [ссылка ] может быть временно недоступен или он постоянно перемещен на новый веб-адрес. ERR_HTTP2_PROTOCOL_ERROR
где может быть проблема?
Я пытался изменить кодировку, добавить метаданные в S3. Ничего не помогает.
Раньше архив с pdf docs можно было скачать и все работало. Но для одного документа случается что-то странное.