html文件上传删除,web服务器访问文件服务器实现上传删除

file.html(测试上传)

function UploadFile(){

var fileObj = $("#img")[0].files[0];

var form = new FormData();//创建一个form对象类似

form.append("k1", "v1");

form.append("fff", fileObj);

$.ajax({

type:'POST',

url: 'http://127.0.0.1:8000/uploadfile',

data: form,

dataType:"json",

processData: false, // tell jQuery not to process the data

contentType: false, // tell jQuery not to set contentType

//如果不写这两句,改变里面的格式,影响内容

success: function(arg){

console.log(arg);

function Downloadfile(){

var fileObj = $("#img")[0].files[0];

var form = new FormData();//创建一个form对象类似

form.append("k1", "v1");

form.append("fff", fileObj);

$.ajax({

type:'POST',

url: 'http://127.0.0.1:8000/uploadfile',

data: form,

dataType:"json",

processData: false, // tell jQuery not to process the data

contentType: false, // tell jQuery not to set contentType

//如果不写这两句,改变里面的格式,影响内容

success: function(arg){

console.log(arg);

}

})

}

}

})

}

function Downloadfile(){

var fileObj = $("#img")[0].files[0];

var form = new FormData();//创建一个form对象类似

form.append("k1", "v1");

form.append("fff", fileObj);

$.ajax({

type:'get',

url: 'http://127.0.0.1:8000/downloadfile?file_name=content1.png&group_id=group1/M00/00/00/rBUACl6yP8CALSg8AAEMCvDz0B0368.png',

// data: {

// 'group_id':'group1/M00/00/00/rBUACl6yR9OAAvEcAABRMd73qoY095.png',

// 'file_name':'8.png'

// },

dataType:"json",

processData: false, // tell jQuery not to process the data

contentType: false, // tell jQuery not to set contentType

//如果不写这两句,改变里面的格式,影响内容

success: function(){

console.log('成功');

}

})

}

fastdfs客户端配置文件client.conf

# connect timeout in seconds

# default value is 30s

connect_timeout=30

# network timeout in seconds

# default value is 30s

network_timeout=60

# the base path to store log files

base_path=/home/guan/fastdfs

# tracker_server can ocur more than once, and tracker_server format is

# "host:port", host can be hostname or ip address

tracker_server=192.144.192.55:22122

#standard log level as syslog, case insensitive, value list:

### emerg for emergency

### alert

### crit for critical

### error

### warn for warning

### notice

### info

### debug

log_level=info

# if use connection pool

# default value is false

# since V4.05

use_connection_pool = false

# connections whose the idle time exceeds this time will be closed

# unit: second

# default value is 3600

# since V4.05

connection_pool_max_idle_time = 3600

# if load FastDFS parameters from tracker server

# since V4.05

# default value is false

load_fdfs_parameters_from_tracker=false

# if use storage ID instead of IP address

# same as tracker.conf

# valid only when load_fdfs_parameters_from_tracker is false

# default value is false

# since V4.05

use_storage_id = false

# specify storage ids filename, can use relative or absolute path

# same as tracker.conf

# valid only when load_fdfs_parameters_from_tracker is false

# since V4.05

storage_ids_filename = storage_ids.conf

#HTTP settings

http.tracker_server_port=80

#use "#include" directive to include HTTP other settiongs

##include http.conf

server.py

# -*- coding:utf-8 -*-

import json

import tornado.ioloop

import tornado.web

from fdfs_client.client import *

from tornado.httpserver import HTTPServer

from tornado.netutil import bind_sockets

from tornado.process import fork_processes

class MyEncoder(json.JSONEncoder):

def default(self, obj):

if isinstance(obj, bytes):

return str(obj, encoding='utf-8')

return json.JSONEncoder.default(self, obj)

class MainHandler(tornado.web.RequestHandler):

def set_default_headers(self):

print("setting headers!!!")

self.set_header("Access-Control-Allow-Origin", "*") # 这个地方可以写域名

self.set_header("Access-Control-Allow-Headers", "x-requested-with")

self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')

def get(self):

self.render('index.html')

class UploadFileHandler(tornado.web.RequestHandler):

def set_default_headers(self):

print("setting headers!!!")

self.set_header("Access-Control-Allow-Origin", "*") # 这个地方可以写域名

self.set_header("Access-Control-Allow-Headers", "x-requested-with")

self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')

def get(self):

pass

def post(self, *args, **kwargs):

file_metas = self.request.files["fff"]

res={}

self.set_header('Content-Type', 'application/json; charset=UTF-8')

for meta in file_metas:

file_name = meta['filename']

ext_name = file_name.split(".")[-1]

client_file = 'client.conf'

trackers = get_tracker_conf(client_file)

client = Fdfs_client(trackers)

t1=time.time()

ret_upload = client.upload_by_buffer(meta['body'],file_ext_name=ext_name)

print('压力测试: ','文件大小: 592036495b','上传耗时: ',time.time()-t1)

# if ret_upload.get('Status')!='Upload successed.':

# return ({

# 'msg':'fail'

# })

if ret_upload.get('Status')!='Upload successed.':

res = {

"msg": "上传失败"

}

self.set_status(400)

else:

res=ret_upload

res['url']='192.144.192.55:80/'+str(ret_upload['Remote file_id'], encoding='utf-8')

print(res)

self.write(json.dumps(res,cls=MyEncoder,))

self.finish()

class DeleteFileHandler(tornado.web.RequestHandler):

def set_default_headers(self):

# print("setting headers!!!")

self.set_header("Access-Control-Allow-Origin", "*")

self.set_header("Access-Control-Allow-Headers", "x-requested-with")

self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')

def get(self):

# ('Delete file successed.', b'group1/M00/00/00/rBUACl6yNeOATBuFAAAACwc-XUQ013.txt', b'192.144.192.55')

# group1 / M00 / 00 / 00 / rBUACl6yM3uAf7gSAAEMCvDz0B0420.png

group_id = self.get_query_argument('group_id', '').encode(encoding = "utf-8")

# download

client_file = 'client.conf'

trackers = get_tracker_conf(client_file)

client = Fdfs_client(trackers)

ret_delete = client.delete_file(group_id)

if ret_delete[0]=='Delete file successed.':

res = {

'Status': ret_delete[0],

'Remote file_id': ret_delete[1],

'Storage IP': ret_delete[2],

'url':'192.144.192.55:80/'+str(ret_delete[1], encoding='utf-8')

}

else:

res={

'msg':'删除失败'

}

self.set_status(400)

# self.write(json.dumps(res, cls=MyEncoder, ))

# self.finish()

self.write(json.dumps(res, cls=MyEncoder, ))

self.finish()

print(ret_delete)

class DownloadFileHandler(tornado.web.RequestHandler):

def set_default_headers(self):

# print("setting headers!!!")

self.set_header("Access-Control-Allow-Origin", "*") # 这个地方可以写域名

self.set_header("Access-Control-Allow-Headers", "x-requested-with")

self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')

# {'Remote file_id': b'group1/M00/00/00/rBUACl6yNeOATBuFAAAACwc-XUQ013.txt', 'Content': 'content1.txt',

# 'Download size': '11B', 'Storage IP': b'192.144.192.55'}

def get(self):

# group1 / M00 / 00 / 00 / rBUACl6yM3uAf7gSAAEMCvDz0B0420.png

# path = self.get_query_argument('path', '')

file_name = self.get_query_argument('file_name', '')

self.set_header('Content-Type', 'application/octet-stream')

# filename 指定下载名字

self.set_header('Content-Disposition', 'attachment; filename=' + file_name)

group_id = self.get_query_argument('group_id', '').encode('utf8')

print(file_name, group_id)

# download

# try:

client_file = 'client.conf'

trackers = get_tracker_conf(client_file)

client = Fdfs_client(trackers)

# print(os.path.join(path,file_name))

ret_download = client.download_to_file(file_name,group_id)

res=ret_download

res['url'] = '192.144.192.55:80/' + str(ret_download['Remote file_id'], encoding='utf-8')

# except:

# res={

# 'msg':'下载失败'

# }

# self.set_status(400)

self.write(json.dumps(res, cls=MyEncoder, ))

self.finish()

settings = {

'template_path': 'template',

}

application = tornado.web.Application([

(r"/index", MainHandler),

(r"/uploadfile", UploadFileHandler),

(r"/deletefile", DeleteFileHandler),

(r"/downloadfile", DownloadFileHandler),

], **settings)

if __name__ == "__main__":

sockets = bind_sockets(port=8000, address="127.0.0.1")

fork_processes(10)

server = HTTPServer(application, max_buffer_size=604857600)

server.add_sockets(sockets)

# application.listen(8000)

tornado.ioloop.IOLoop.instance().start()

用postman测试删除

94d3125eafa2

简述.PNG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值