Попытка загрузить файл из приложения UWP в колбу restful web api, не удалось - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь создать приложение UWP, используя C #.И я также создаю успокоительный веб-API, используя колбу на другом устройстве (то есть Raspberry Pi).Но когда я попытался загрузить изображение из приложения UWP в raspberry pi через API, raspberry pi не получил файл, хотя запрос казался успешным.

, поэтому после запуска веб-API на raspberryпи, а затем запустив приложение UWP на Windows 10, я получил это возвращение: «нет файла».

Это код для моего приложения UWP

public async void Upload_FileAsync(string WebServiceURL, string 
FilePathToUpload){
    IStorageFile storageFile = await 
    StorageFile.GetFileFromPathAsync(FilePathToUpload);

    IRandomAccessStream stream = await 
    storageFile.OpenAsync(FileAccessMode.Read);
    HttpStreamContent streamfile = new HttpStreamContent(stream);
    HttpMultipartFormDataContent httpContents = new 
                      HttpMultipartFormDataContent();

    httpContents.Headers.ContentType.MediaType = "multipart/form-data";
    httpContents.Add(streamfile, "file");

    var client = new HttpClient();
    HttpResponseMessage result = await client.PostAsync(
                       new Uri(WebServiceURL), httpContents);
    string stringReadResult = await result.Content.ReadAsStringAsync();
    textBox.Text = stringReadResult;
}

Вот как я называюfunction

Upload_FileAsync("http://192.168.0.111:5000/upload", 
             "c:\\pictures\\testImage3.jpg");

Это код для отдыха API

from flask import Flask
from flask_restful import Resource, Api, reqparse
import werkzeug, os

app = Flask(__name__)
api = Api(app)
UPLOAD_FOLDER = 'static/img'
parser = reqparse.RequestParser()
parser.add_argument('file',
    type=werkzeug.datastructures.FileStorage,
    location='files')

class PhotoUpload(Resource):
    def post(self):
        data = parser.parse_args()
        if data['file'] == None:
            return "no file"
        photo = data['file']

        if photo:
            filename = 'received.png'
            photo.save(os.path.join(UPLOAD_FOLDER, filename))
            return "file uploaded"

api.add_resource(PhotoUpload, '/upload')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

Я ожидаю, что: успешно загрузить изображение в Raspberry Pi через API и сохранить его на Raspberryчисло Пи.Но фактический вывод - «нет файла».

И распечатка на Raspberry Pi была такой:

[27/Jan/2019 17:18:02] "POST /upload HTTP/1.1" 200 -

, поэтому кажется, что запрос был в порядке, но файл не был в запросе.

1 Ответ

0 голосов
/ 28 января 2019

Я нашел проблему.Я забыл разобрать имя файла при вызове этой функции:

httpContents.Add(streamfile, "file");

Итак, правильный способ сделать это:

httpContents.Add(streamfile, "file", Path.GetFileName(FilePathToUpload));

и теперь он работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...