You have your own site and want to upload screenshots to it. This small article describes how to do it.
You will need:
– personal site or any hosting with SFTP or FTP access. For example: virtual private server with SSH or FTP access.
– install Cygwin (easy).
You will got: after you click "Upload image" in Screenshot Captor, image will be uploaded and URL will be copied to clipboard, e.g.
http://files.example.com/screenshots/20120504_162348_591_nMFnu4un.pngYou can upload image in different ways:
- Main menu:
SendTo →
Upload image file with Uploader tool.
- Tray icon:
Upload last image.
- New screenshot popup after capture:
Send to... →
Upload image file with Uploader tool.
- Screenshot Captor floating toolbar:
Select post-capture options and actions → [x]
Upload screenshot.
Differences from ZUploader:
– ZUploader doesn't work for SFTP at all for me (as for v.5.5.0 r3030),
– random string is added to file name, so no one will be able to see your screenshots: you should give an exact link to it,
– screenshot is saved with single style of file naming: date_time_milliseconds_random.ext. This allows to order screenshots by date and resists to file name guessing.
I've tested three modes of upload (from most to less preferred):
1) upload using SFTP with public key,
2) upload using SFTP with password,
3) upload using FTP with password.
Some other upload protocols that are possible in "lftp" mode: FTPS, HTTP, HTTPS, HFTP, FISH, Torrent.
Steps for SFTP with public key1. Run
http://cygwin.com/setup.exe and install "openssh" in addition to base package. So you will have files "sftp.exe" and "date.exe" in folder "C:\Cygwin\bin".
2. Create SSH keys without password (press Enter twice) that will allow you to upload files:
> C:\Cygwin\bin\ssh-keygen -b 2048 -f automatic_access
Copy two new files to directory: "C:\Cygwin\home\UserName\.ssh\". As a result you should got two files: "C:\Cygwin\home\UserName\.ssh\automatic_access" and "automatic_access.pub".
3. Copy public key file "automatic_access.pub" to server to file "~/.ssh/authorized_keys"
4. Test your setup:
"username" is your login to server, "files.example.com" is your site domain.
You should got:
Connected to files.example.com
sftp>
Type "quit".
Example of server configuration:
– home directory of site: ~/ (e.g. /home/sites/files.example.com/)
– public ssh key: ~/.ssh/authorized_keys
– some directory for screenshots:
http://files.example.com/screenshots/ matches to path on server ~/data/screenshots/
So, if you put file to ~/data/screenshots/screenshot.png you will be able to see it here:
http://files.example.com/screenshots/screenshot.png5. Update variables in upload.bat (file is below) to match your configuration:
set pathToCygwinBin=C:\Cygwin\bin
set urlPathPrefix=http://files.example.com/screenshots
set serverPathPrefix=/data/screenshots
set
[email protected]set uploadMode=sftp
set privateKey=~/.ssh/automatic_access
6. Main menu:
Edit →
Preferences →
External Tools -
Custom Uploader Tool: specify path to "upload.bat".
In same window:
Online Uploading → (*)
Use custom uploader.
Now command "Upload image" will upload screenshot to your site and will copy URL to it to clipboard.
Steps for SFTP with password1. Run
http://cygwin.com/setup.exe and install "lftp" in addition to base package. So you will have files "lftp.exe" and "date.exe" in folder "C:\Cygwin\bin".
2-4. Skip.
5. Update variables in upload.bat (file is below) to match your configuration:
set pathToCygwinBin=C:\Cygwin\bin
set urlPathPrefix=http://files.example.com/screenshots
set serverPathPrefix=/data/screenshots
set remoteServer=sftp://login:
[email protected]set uploadMode=lftp
(notice "uploadMode" variable is changed)
Steps for FTP with password1. Run
http://cygwin.com/setup.exe and install "lftp" in addition to base package. So you will have files "lftp.exe" and "date.exe" in folder "C:\Cygwin\bin".
2-4. Skip.
5. Update variables in "upload.bat" (file is below) to match your configuration:
set pathToCygwinBin=C:\Cygwin\bin
set urlPathPrefix=http://files.example.com/screenshots
set serverPathPrefix=/data/screenshots
set remoteServer=ftp://login:
[email protected]set uploadMode=lftp
(notice "uploadMode" variable is changed)
upload.bat:
Spoiler
@echo off
rem Depends on Cygwin: date, sftp (openssh) or lftp
set pathToCygwinBin=C:\Cygwin\bin
set urlPathPrefix=http://files.example.com/screenshots
set serverPathPrefix=/data/screenshots
rem uploadMode=sftp for SFTP with public key or uploadMode=lftp in other cases.
set uploadMode=sftp
set privateKey=~/.ssh/automatic_access
rem Don't warn about Windows path scheme.
set CYGWIN=nodosfilewarning
set source=%1
if exist %source% (
rem file exists
) else (
echo Error: file %source% doesn't exist.
exit
)
rem Get full name of file.
for /F "tokens=*" %%A in ('dir /L /B %source%') do set Variable=%%A
rem Get file extension in lowercase.
for %%i in ("%Variable%") do set sourceExt=%%~xi
rem Generate random string.
setlocal EnableDelayedExpansion
set _RNDLength=8
set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set _Str=%_Alphanumeric%987654321
:_LenLoop
if not "%_Str:~18%"=="" set _Str=%_Str:~9%& set /A _Len+=9& goto :_LenLoop
set _tmp=%_Str:~9,1%
set /A _Len=_Len+_tmp
set _count=0
set _RndAlphaNum=
:_loop
set /a _count+=1
set _RND=%Random%
set /A _RND=_RND%%%_Len%
set _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
if !_count! lss %_RNDLength% goto _loop
rem Get current time.
for /F "tokens=*" %%A in ('%pathToCygwinBin%\date +%%Y%%m%%d_%%H%%M%%S_%%N') do set Variable=%%A
set FileTime=%Variable:~0,19%
rem Compose new file name.
set NewName=%FileTime%_!_RndAlphaNum!!sourceExt!
set destination="%serverPathPrefix%/!NewName!"
set url=%urlPathPrefix%/!NewName!
rem Copy to clipboard without new line and trailing space.
<nul set /p any-variable-name="%url%"| clip
echo Url %url% was copied to clipboard.
rem Convert file path for Cygwin and add quotes.
set source=%source:\=/%
rem Remove existen quotes if any, and add quotes.
set source="%source:"=%"
rem Upload.
if "%uploadMode%"=="sftp" (
echo put %source% %destination%| %pathToCygwinBin%\sftp -C -i %privateKey% %remoteServer%
) else (
echo put %source% -o %destination%| %pathToCygwinBin%\lftp %remoteServer%
)
rem pause