在平时的工作中,我们需要以接口的形式调用具体的转换逻辑。同时,我们可以将文件转换成服务形式。服务开启后传入参数或地址,逻辑转换直接调用即可。今天的文章主要讲解如何将文件转换写成服务;让我们等着看!!!文件服务器Office文件转换为PDF涉及文件传输,因此请考虑使用文件服务器来传输文件。如果客户端有文件服务器,还需要在服务器上写一个文件服务器,将转换后的文件返回给以后使用。对于客户端使用,文件服务器的实现思路如下:前端文件上传下载页面
要下载的文件:要上传的文件:上传文件upload.py部分代码如下:importcgi,osform=cgi.FieldStorage()item=form["filename"]ifitem.filename:fn=os.path.basename(item.filename)open("/home/sxhlinux/data/"+fn,"wb").write(item.file.read())msg??="File"+fn+'上传成功!'else:msg='没有文件上传'print("""\Content-type:text/html\nHelloworld名称:%s
"""%(msg,))下载文件下载文件download.py部分代码如下:form=cgi.FieldStorage()filename=form.getvalue('filename')dir_path="F:/WorkSpace/FilesToPDF/file_server/tmp"target_path=dir_path+str(filename)ifos.path.exists(target_path)==True:print("Content-Type:application/octet-stream")print('Content-Disposition:attachment;filename="%s"'%filename)print(target_path)sys.stdout.flush()fo=打开(target_path,“rb”)sys.stdout.buffer.write(fo.read())fo.close()else:print("""\Content-type:text/html\n文件服务器服务器中不存在%s:服务器列表中的文件如下:
"""%filename)forlineinos.popen(文件名):name=line.strip().split('',8)type(name)iflen(name)==9:print("""%s"""%(line,name[8]))文件服务文件服务入口server.py部分代码如下:if__name__=='__main__':try:handler=CGIHTTPRequestHandlerhandler.cgi_directories=['/cgi-bin','/htbin']#port=int(sys.argv[1])port=8001print('portis%d'%port)server=HTTPServer(('',port),handler)print('Welcometomywebsite!')server.serve_forever()exceptKeyboardInterrupt:print('^Creceived,shuttingdownserver')server.socket.close()上述服务启动后,它们可以被使用转换逻辑接口转换接口使用PythonFlask框架,具体的转换逻辑需要在文件转换逻辑中引入。接口逻辑实现代码如下:fromflaskimportFlask,render_template,requestimportrequestsimportconfigfromrequestsimportgetimportfiles2pdf#导入转换逻辑importos,shutilfromflaskimportFlask,render_template,url_for,send_from_directory,json,make_response,jsonifyapp=Flask(__name__,static_folder='/static')app.config.from_object(config)app.config["SECRET_KEY"]="123456"@app.route('/')defindex():return"WelcometoYou,请访问网址:http://IP:5000/upload_file?filePath=xxx.pptx"#pathname=''@app.route('/upload_file',methods=['GET','POST'])defupload_file():ifrequest.method=='POST'orrequest.method=='GET':file_url=request.args.get('filePath','')req=get(file_url)ifreq.status_code==404:print("nofile")return#得到正确转换后的文件名filename=file_url.split('/')[-1]name=filename.split('?')[1]ppt_name=name.split('=')[-1]print(ppt_name)withopen(ppt_name,"wb")asfile:#getrequest#response=get(url)#writetofilefile.write(req.content)#判断要转换的文件是否存在ifos.path.exists(ppt_name)andnotos.path.exists(file_path+'/'+ppt_name):shutil.move(ppt_name,file_path)elifos.path.exists(ppt_name)andos.path.exists(file_path+'/'+ppt_name):print('文件已经存在')os.remove(ppt_name)print("alreadydeletedexistsfile")pdfConverter=files2pdf.PDFConverter(file_path+'/'+ppt_name)#调用文件转换总辑#print("transformcomplete:"+pdfConverter)pdfConverter.run_conver()#filetransformfinshed-->获取文件名re_name=ppt_name.replace('.pptx','.pdf')print('新名称是:'+re_name)#/static/%E6%B0%B4%E9%92%A2%E9%9B%86%E5%9B%A2%E6%99%BA%E6%85%A7%E5%85%9A%E5%BB%BA%E5%9F%B9%E8%AE%AD%E8%B5%84%E6%96%990420%282%29.pdfre_url='IP:8001'#文件服务地址#urlfor=url_for('static',filename=re_name)returnre_url+url_for('static',filename=re_name)#returnrender_template('result_link.html')if__name__=='__main__':app.run(host='0.0.0.0',port=5000)调用先启动server.py再启动flaskdemo.py,传入参数调用逻辑可以使用postman调用以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享