我现在有以下代码, upload_path = request.files['path'] # 上传的文件 data_path = upload_path.filename # 文件的路径,怎么保证我获得的中文路径不乱码,可以正常读取
时间: 2023-11-27 08:53:20 浏览: 76
在处理文件路径时,应该使用 Python 的内置模块 `os` 来进行处理。具体来说,可以使用 `os.path` 模块中的一些函数来获取正确的文件路径。例如:
```python
import os
# 获取上传文件的路径
upload_path = request.files['path']
# 获取上传文件的文件名
filename = upload_path.filename
# 获取当前工作目录
current_dir = os.getcwd()
# 构造完整的文件路径
file_path = os.path.join(current_dir, 'uploads', filename)
# 读取文件
with open(file_path, 'rb') as f:
data = f.read()
```
在上面的代码中,我们使用了 `os.getcwd()` 函数获取当前工作目录,然后使用 `os.path.join()` 函数构造完整的文件路径。这样可以确保我们获得的文件路径不会出现乱码,并且可以正常读取文件内容。
相关问题
def schemaName_file_upload(request): if request.method in ["POST", "GET"]: msg = {"code": normal_code, "msg": "成功", "data": {}} file = request.FILES.get("file") if file: filename = file.name filesuffix = filename.split(".")[-1] file_name = "{}.{}".format(int(float(time.time()) * 1000), filesuffix) filePath = os.path.join(os.getcwd(), "templates/front", file_name) print("filePath===========>", filePath) with open(filePath, 'wb+') as destination: for chunk in file.chunks(): destination.write(chunk) msg["file"] = file_name req_dict = request.session.get("req_dict") type1 = req_dict.get("type", 0) print("type1=======>",type1) type1 = int(type1) if type1 == 1: params = {"name":"faceFile","value": file_name} config.createbyreq(config, config, params) if '是' in hasHadoop or 'spark' in hasHadoop: try: client = Client("http://127.0.0.1:50070/") client.upload(hdfs_path=f'/{file_name}', local_path=filePath, chunk_size=2 << 19, overwrite=True) except Exception as e: print(f"hdfs upload error : {e}") return JsonResponse(msg)具体注释
这段代码定义了一个视图函数 `schemaName_file_upload`,用于处理上传文件的请求。如果请求的方法是 POST 或 GET,就会返回一个 JSON 格式的响应,其中包含一个 code 码、一个 msg 信息以及一个 data 数据字段。
在函数中,首先获取上传的文件对象,然后获取文件名和文件后缀。接着,生成一个新的文件名,新文件名由当前时间戳与文件后缀组成。然后,将新文件名与当前工作目录拼接成文件路径,最后将上传的文件写入到该路径下。
如果上传的文件类型为人脸识别类型,就会创建一个新的配置文件,将文件名加入到配置文件中。如果系统中存在 Hadoop 或 Spark 等大数据处理框架,就会将文件上传至 HDFS 文件系统中。
最后,返回一个 JSON 格式的响应,其中包含上传成功或失败的信息以及上传的文件名。
# 获取拍照图片 @app.route('/get_onlinephoto', methods=['POST']) def get_onlinephoto(): # 获取上传的图片文件 image_file = request.files['image'] # 保存图片文件 image_file.save(os.path.join(app.root_path, 'static', 'picture', image_file.filename)) return '上传成功' 前端要写ajex上传图片怎么写
前端代码可以参考以下示例:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>上传图片</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<form id="upload-form" enctype="multipart/form-data">
<input type="file" id="image-file" name="image">
<button type="submit" id="upload-button">上传图片</button>
</form>
<div id="result"></div>
<script>
$('#upload-form').submit(function(e) {
e.preventDefault();
var formData = new FormData(this);
$.ajax({
url: '/get_onlinephoto',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data) {
$('#result').text(data);
},
error: function(xhr, status, error) {
console.error(error);
}
});
});
</script>
</body>
</html>
```
这个示例代码使用 jQuery 发送 AJAX 请求,将表单数据转换为 FormData 对象,然后通过 POST 方法发送给服务器。由于上传的是图片文件,所以需要设置 processData 和 contentType 属性为 false,以避免将数据序列化为字符串。成功上传后,服务器会返回一个字符串,这个字符串会显示在页面上。
阅读全文