傳送鏈接 : http://182.254.145.145/group1/M00/00/00/Co8plFWPh0LvBBVSAACAYF6Y1Z8204.htm 在用python測試上傳的時候發現一旦文件名是漢字的程序就會爆出異常,沒法將漢字的文件名 轉碼,而後在網上搜索(都差很少估計都是轉的)大部分使用的方式是 relaod重載sys模塊,python 在用sys模塊設置默認編碼,可是python3裏沒有reload函數了。web 1那麼若是咱們想用的話怎麼辦? 其實python3 內置的編碼格式就是unicode ,咱們只須要將json 寫好的代碼保存成utf8的就能夠了。服務器 2能夠查看一下環境變量,若是LANG=c 你須要在 /etc/profile 裏把LANG= LANG=zh_CN.UTF-8app 導出,就能夠了,不須要在文件頭寫 # -*- coding:utf-8 -*- 這種東西了,他默認的就是。webapp 服務器接文件 函數 import tornado.web tornado import os post import json class UploadFileHandler(tornado.web.RequestHandler): def get( self ) : pass; def post ( self ): try : upload_path=os.path.join(os.path.dirname("/data/www/xx"),'temp'); file_metas=self.request.files['file']; for meta in file_metas: filename=meta['filename'] filepath=os.path.join(upload_path,filename) with open(filepath,'wb') as up: up.write(meta['body']); client_file='/etc/fdfs/client.conf' cmdline='fdfs_upload_file %s %s' % ("/etc/fdfs/client.conf",filepath); retcode=os.popen(cmdline).readlines(); result={}; result['result']=0; result['file']=retcode[0]; self.write(json.dumps(result)) except Exception : result={}; result['result']=1; result['error']=e; self.write(json.dumps(result)); 客戶端上傳 package com.webapp.upload { import flash.display.InteractiveObject; import flash.events.DataEvent; import flash.events.Event; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.net.FileReference; import flash.net.URLRequest; public class UploadFileHandler { protected var clickItor:InteractiveObject; protected var request:URLRequest ; public function UploadFileHandler(itor:InteractiveObject,url) { clickItor = itor; request = url; clickItor.addEventListener(MouseEvent.CLICK , onChooseFile); } protected var file:FileReference ; protected function onChooseFile(e:MouseEvent):void { file = new FileReference(); file.browse(); file.addEventListener(Event.SELECT, onSelectFile); } protected var fileName:String = ""; protected function onSelectFile(e:Event):void { fileName = (file.name); file.addEventListener(Event.COMPLETE , onLoadedInRam); file.load(); } protected function onLoadedInRam(e:Event):void { trace("start ...upload"); file.removeEventListener(Event.COMPLETE , onLoadedInRam); trace(file.data.length); file.upload(request,"file"); file.addEventListener(Event.COMPLETE , onLoadedInRequest); file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onResponeData); file.addEventListener(ProgressEvent.PROGRESS, onProcessHandler); } protected function onProcessHandler(e:ProgressEvent):void { trace(int(e.bytesLoaded/e.bytesTotal * 100) + "%"); } protected function onResponeData(e:DataEvent):void { trace(e.data); } protected function onLoadedInRequest(e:Event):void { trace("is done"); } } } 輸出結果 start ...upload 19716 100% is done {"result": 0, "file": "group1/M00/00/00/Co8plFWPgLTHsaTpAABNBD70KHg613.xml\n"} 這樣的話就支持全部的編碼了,那麼下一步咱們須要將上傳到臨時目錄 的文件上載到fastdfs裏, 而後返回fast的地址給前端,大體的思路就是 如此。固然這中間的業務邏輯就不說了,咱們只討論的是上傳和下載。 另外不得不吐槽一下, python也是夠冷門的, 查了那麼多資料居然 都python2x的,python3的解決方案太少,大部分都是轉的,python 這麼多的坑,怎麼填? |