gpt4 book ai didi

c# - 尝试将文件从 UWP 应用程序上传到 Flask restful web api,失败

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:31 26 4
gpt4 key购买 nike

我正在尝试使用 C# 构建 UWP 应用程序。我还在我的其他设备(即 raspberry pi)上使用 flask 构建了一个 restful web api。但是当我尝试通过 api 从 UWP 应用程序上传图像到树莓派时,树莓派没有收到文件,而请求似乎是成功的。

所以,在 raspberry pi 上运行 web api 然后在 windows 10 上运行 uwp 应用程序后,我得到了这个返回:“没有文件”。

这是我的 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;
}

函数是这样调用的

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

这是rest 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')

我期待的是:通过api成功上传一张图片到树莓派,并存储在树莓派上。但实际输出是“无文件”。

树莓派上的打印输出是这样的:

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

所以看起来请求没问题,但文件不在请求中。

最佳答案

我发现了问题。调用这个函数的时候忘记解析文件名了:

httpContents.Add(streamfile, "file");

所以,正确的做法是:

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

现在可以了!

关于c# - 尝试将文件从 UWP 应用程序上传到 Flask restful web api,失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54393981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com