Загрузка строки в S3 с помощью rusoto - PullRequest
0 голосов
/ 16 декабря 2018

Я использую rusoto S3 для создания строки JSON и загрузки этой строки в корзину S3.Я могу создать строку, но для S3 PutObjectRequest от rusoto требуется StreamingBody, и я не уверен, как можно создать StreamingBody из строки или действительно ли это необходимо.

extern crate json;
extern crate rusoto_core;
extern crate rusoto_s3;
extern crate futures;

use rusoto_core::Region;
use rusoto_s3::{S3, S3Client, PutObjectRequest};

fn main() {
    let mut paths = Vec::new();
    paths.push(1);
    let s3_client = S3Client::new(Region::UsEast1);
    println!("{}", json::stringify(paths));
    s3_client.put_object(PutObjectRequest {
        bucket: String::from("bucket"),
        key: "@types.json".to_string(),
        body: Some(json::stringify(paths)),
        acl: Some("public-read".to_string()),
        ..Default::default()
    }).sync().expect("could not upload");
}

Я получаю ошибку:

error[E0308]: mismatched types
  --> src/main.rs:16:20
   |
16 |         body: Some(json::stringify(paths)),
   |                    ^^^^^^^^^^^^^^^^^^^^^^ expected struct `rusoto_core::ByteStream`, found struct `std::string::String`
   |
   = note: expected type `rusoto_core::ByteStream`
              found type `std::string::String`

Я не уверен, как дать это ByteStream ... ByteStream::new(json::stringify(paths)) не работает и дает мне другую ошибку.

Какя могу загрузить строку?

1 Ответ

0 голосов
/ 16 декабря 2018

StreamingBody - псевдоним типа:

type StreamingBody = ByteStream;

ByteStream имеет несколько конструкторов, включая реализацию From:

impl From<Vec<u8>> for ByteStream

Вы можете преобразовать String в Vec<u8>, используя String::into_bytes.Все вместе:

fn example(s: String) -> rusoto_s3::StreamingBody {
    s.into_bytes().into()
}
...