def test_upload_file_custom_filename(): """Test uploading a file with a custom filename.""" src_file = './testdata/file1' skylink = 'testskylinkcustomname' sialink = Skynet.uri_skynet_prefix() + skylink custom_name = 'testname' opts = Skynet.default_upload_options() opts.custom_filename = custom_name # upload a file with custom filename responses.add(responses.POST, 'https://siasky.net/skynet/skyfile', json={'skylink': skylink}, status=200) print("Uploading file " + src_file) sialink2 = Skynet.upload_file(src_file, opts) if sialink != sialink2: sys.exit("ERROR: expected returned sialink " + sialink + ", received " + sialink2) print("File upload successful, sialink: " + sialink2) body = responses.calls[0].request.body assert str(body).find('Content-Disposition: form-data; name="file"; \ filename="' + custom_name + '"') != -1 with open(src_file, 'r') as fd: contents = fd.read().strip() assert str(body).find(contents) != -1 assert len(responses.calls) == 1
async def post(self): import zipfile from requests.auth import HTTPBasicAuth from siaskynet import Skynet uploaded_file = self.request.files['file'][0] filename = self.get_query_argument('filename') local_filename = '/tmp/{}'.format(filename) with open(uploaded_file['filename'], 'wb') as f: f.write(uploaded_file['body']) with zipfile.ZipFile(uploaded_file['filename'], 'r') as zip_ref: zip_ref.extractall(local_filename + '/dir') try: opts = Skynet.default_upload_options() opts.portal_url = 'http://0.0.0.0:9980' skylink = Skynet.upload_directory(local_filename + '/dir') except Exception as e: self.set_status(400) return self.render_as_json({ 'status': 'error', 'message': 'sia node not responding' }) return self.render_as_json({ 'status': 'success', 'skylink': Skynet.strip_prefix(skylink) })
async def skyup(ctx, *args): try: ts = datetime.now().strftime("-%H:%M:%S:%f") if ctx.message.attachments: url = ctx.message.attachments[0].url r = requests.get(url) file_name = url.split('/')[-1] + ts with open(file_name, 'wb') as new_file: new_file.write(r.content) else: if not args: return file_name = 'text_message.txt' + ts with open(file_name, 'wt') as new_file: new_file.write(ctx.message.content[7:]) opts = Skynet.default_upload_options() opts.custom_filename = file_name[:-16] skylink = upload_file(file_name, opts) embed = Embed(title='Upload successful') embed.add_field(name='Sia link', value=skylink, inline=False) embed.add_field(name='Web link', value=skylink.replace('sia://', 'https://siasky.net/'), inline=False) embed.add_field(name='Requested by', value=ctx.message.author.mention, inline=False) await ctx.send(embed=embed) new_file.close() os.remove(file_name) except Exception as ex: traceback.print_exc() logging.error('Exception of type {%s}: {%s}' % (type(ex).__name__, str(ex)))
def sia_upload_options(custom_filename='', portal=None): options = Skynet.default_upload_options() if portal: options.portal_url = SIA_API_BASEPATH options.custom = True else: options.custom = False options.custom_filename = custom_filename return options
def upload_file_request(path, opts=None): if opts is None: opts = Skynet.default_upload_options() with open(path, 'rb') as f: host = opts.portal_url path = opts.portal_upload_path url = f'{host}/{path}' filename = opts.custom_filename if opts.custom_filename else os.path.basename( f.name) r = requests.post(url, files={opts.portal_file_fieldname: (filename, f)}) return r
def post_upload_file(filename): options = Skynet.default_upload_options() host = options.portal_url path = options.portal_upload_path url = f'{host}/{path}' res = requests.get(filename) filename = filename.split("/")[-1] f = open(filename, "w+") f.write(res.text) f.close() f = open(filename, "rb") r = requests.post(url, files={options.portal_file_fieldname: (filename, f)}) f.close() return r
def handle_message(**payload): data = payload['data'] web_client = payload['web_client'] rtm_client = payload['rtm_client'] text = None if 'text' in data: channel_id = data['channel'] thread_ts = data['ts'] user = data['user'] text = data.get('text', []) match = re.match(MENTION_REGEX, text) if match: user_id, message = match.groups() message = message.strip(" ") else: message = text message = message.replace(u'\xa0', u' ') split_message = message.split(" ") command = split_message.pop(0) files = split_message files_options = { "token": os.environ['SLACK_BOT_TOKEN'], "channel": channel_id, "user": user, } #res = requests.get('https://slack.com/api/files.list', files_options) #print(res.text) res = requests.get(files[0][1:-1]) if command in acceptable_commands: options = Skynet.default_upload_options() #for filename in files: filename = files[0][1:-1] skylink = upload_file(filename, options) response = web_client.chat_postMessage( channel=channel_id, text=str(skylink), thread_ts=thread_ts )