В настоящее время я пытаюсь обработать изображение на сервере, которое было загружено пользователем. Моя цель - загрузить это изображение, которое было загружено, обработать его на сервере, а затем загрузить в облачные файлы rackspace. Мне не повезло найти способ. Я надеюсь, что кто-то может привести меня в правильное направление.Обработка изображения в Dart
Вот что я до сих пор на стороне сервера для обработки
Future <Null> handleUploadRequest(final HttpRequest httpRequest) async {
print('handle upload -------------------------');
var data;
await httpRequest.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
data = builder.takeBytes();
String encodedData = JSON.encode(data);
int dataLength = encodedData.length;
// Uploading image to rackspace cloud files
// Here we have to send a request with username & api key to get an auth token
http.post(tokens, headers : {'Content-Type':'application/json'}, body: JSON.encode({"auth": {"RAX-KSKEY:apiKeyCredentials":{"username":"XXXXXXXXXXXXXXX","apiKey":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}})).then((response) {
print("Response status: ${response.statusCode}");
print("Response body: ${response.body}");
return response;
}).then((response){
authResponse = JSON.decode(response.body);
String token = authResponse['access']['token']['id'];
/////////// This is where we upload the image to Rackspace ///////
var request = new http.MultipartRequest("PUT", Uri.parse('https://storage101.iad3.clouddrive.com/v1/MossoCloudFS_XXXXXXX/TestContainer/testimage.jpg'));
request.headers['X-Auth-Token'] = token;
request.headers['Content-Type'] = 'image/jpeg';
var stream = new http.ByteStream.fromBytes(data);
request.files.add(new http.MultipartFile('file', stream, data.length, filename: 'testfile.jpg', contentType: 'image/jpeg');
print('requesT: ${request}');
request.send().then((response) {
print(response.statusCode);
print(response.headers);
print(response.stream);
if (response.statusCode == 200) print("Uploaded!");
});
//// End of Upload to Rackspace //////////
print('Upload Complete!');
httpRequest.response.write(data);
await httpRequest.response.close();
}
Единственная проблема сейчас в том, что в https://pub.dartlang.org/packages/http, мне нужно позвонить типа MEDIATYPE в параметре типа содержимого. Я понятия не имею, как это назвать. Кажется, это фабрика внутри класса? Если я не вызываю тип содержимого, то по умолчанию используется октет-поток, который нельзя открыть из контейнера хранения cdn.
Ссылка на этот способ загрузки от How can I upload a PDF using Dart's HttpClient?
ли мои предложения приводят к различному поведению? Не могли бы вы изменить свой вопрос и добавить вывод ошибки непосредственно в свой вопрос. Существует ссылка на редактирование ниже тега [dart] и [dart-async]. –
Возвращение до http.put (..) не позволит запустить. он печатает байты, которые он читает, и переходит в .then ((_). –
Я добавил в мой ответ чистую реализацию 'async' /' await', я думаю, что легче рассуждать об этом. Можете ли вы попробовать и сказать если он работает лучше/хуже/то же? –