import zipfile, csv, os import oss2 |
|
def zip_ya(startdir, file_news): | |
# startdir = "./media" # 要压缩的文件夹路径 | |
# file_news = "MMC_" + str(datetime.now()) + ".zip" # 压缩后文件夹的名字 | |
z = zipfile.ZipFile(startdir + file_news, 'w', zipfile.ZIP_DEFLATED) # 参数一:文件夹名 | |
for dirpath, dirnames, filenames in os.walk(startdir): | |
fpath = dirpath.replace(startdir, '') # 这一句很重要,不replace的话,就从根目录开始复制 | |
fpath = fpath and fpath + os.sep or '' # 这句话理解我也点郁闷,实现当前文件夹以及包含的所有文件的压缩 | |
for filename in filenames: | |
z.write(os.path.join(dirpath, filename), fpath + filename) | |
print u'压缩成功' | |
# import pandas as pd | |
@csrf_exempt | |
def to_excel(request): | |
if request.method == 'POST': | |
json_data = json.loads(request.body) | |
else: | |
return HttpResponseBadRequest('Bad Request') | |
if "order_ids" in json_data: | |
id_list = json_data["order_ids"] | |
else: | |
return JsonResponse({"result": 1, "message": "ids is required"}) | |
for order in id_list: | |
temps = IotTemp.objects.filter(order_id=order).order_by('time') \ | |
.values("time", "temperature").distinct() | |
_order = IotOrder.objects.filter(id=order).first() | |
if _order: | |
try: | |
sub = str(_order.number).split("_") | |
file_name = sub[0] + "_" + _order.mac + "_" + sub[1] + "_" + sub[2] + ".csv" | |
with open(os.path.join(sys.path[0], "iot", "media", file_name), 'wb') as csvfile: | |
writer = csv.writer(csvfile, dialect='excel') | |
writer.writerow(["ZenMeasureID:", _order.mac, "Shipment No.:", _order.number]) | |
writer.writerow(["Date", "Time", "Temperature(C)"]) | |
for i in temps: | |
tem_list = [i["time"].strftime("%Y-%m-%d"), i["time"].strftime("%H:%M:%S"), i["temperature"]] | |
writer.writerow(tem_list) | |
del tem_list[:] | |
except: | |
return JsonResponse({"result": 2, "message": "order wrong"}) | |
else: | |
return JsonResponse({"result": 2, "message": "order not exits"}) | |
startdir = os.path.join(sys.path[0], "iot", "media") # 要压缩的文件夹路径 | |
file_news = "ZenMeasureIoT_" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + ".zip" | |
zip_ya(startdir, file_news) | |
# user_sts_key() 连接 上传oss | |
AccessKeyID = "" | |
AccessKeySecret = "" | |
auth = oss2.Auth(AccessKeyID, AccessKeySecret) | |
bucket = oss2.Bucket(auth, 'http://oss-cn-beijing.aliyuncs.com', 'iot-server') | |
with open(startdir + file_news, "rb") as fileobj: | |
result = bucket.put_object('records/' + file_news, fileobj) | |
print result.status | |
if int(result.status) == 200: | |
# 删除 | |
del_file(startdir) | |
os.remove(startdir + file_news) | |
data = { | |
"url": "http://" + 'iot-server' + ".oss-cn-beijing.aliyuncs.com/" + "records/%s" % (file_news) | |
} | |
return JsonResponse({"result": 0, "message": "success", "data": data}) | |
else: | |
return JsonResponse({"result": 1, "message": "failed"}) | |
def del_file(path): | |
# 删除目录下文件 | |
ls = os.listdir(path) | |
for i in ls: | |
c_path = os.path.join(path, i) | |
if os.path.isdir(c_path): | |
del_file(c_path) | |
else: | |
os.remove(c_path) |
oss2 文档 https://help.aliyun.com/document_detail/32030.html