學習 tornado 服務器 - 配合fastdfs上傳下載

 空間收藏於 2014-06-27 01:34 前端

 


傳送鏈接 : 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.webtornado

import ospost

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

這麼多的坑,怎麼填? 

相關文章
相關標籤/搜索