Save images to hard disk WITHOUT prompt?

2020-01-24 14:04发布

问题:

I use twitter. Some people's tweets contain photos and I want to save them.

I checked ifttt, where twitter is not a trigger. Thus, ifttt cannot help me do it.

One idea is probably to use JavaScript. I use Firefox and installed Greasemonkey. I can write a Greasemonkey script (JavaScript) running on twitter website. Once I click "retweet" link or other button added by my script, my script examines the content of the tweet, find the URL of the photo, and save it to my disk.

One problem is how to save the image. I searched the Internet. Some use win.document.execCommand("SaveAs"), and it will show a "save as" window. Now that the window shows, why not just right click the image and choose save as manually? So I don't like the method.

Any suggestions?

回答1:

Greasemonkey cannot do this, because ordinary javascript is forbidden to do this (for security reasons), and the Greasemonkey API does not expose a method to write files (and never will).

Here are four alternatives:

  1. Update: Switch to Tampermonkey, which you should do anyway. Then you can use GM_download as user136036 said in his answer.

    or

  2. Install and use the excellent DownThemAll add-on (Update: Firefox 57 withdrew support for this kind of extension). It still requires one click, but that's better than always grabbing a file willy nilly, in most cases anyway.

    or

  3. Write your own addon extension. See this (now obsolete) answer for file-writing code from one of the top gurus of FF add-ons. But "new" style extensions can still do this.

    or

  4. Use XAMPP (or similar) to run a web server on your machine. You will then have to write a web application that excepts incoming image data (or just the image URL) and saves the image to disk.


回答2:

It is possible when using Tampermonkey (Firefox or Chrome).
They added the GM_Download command.
You can use it like this:

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http*://*/*
// @grant        GM_download
// ==/UserScript==


var arg = { url: "https://example.com/123456.jpg",
            name: "CustomFileName.jpg"
          };

GM_download(arg);

For more help and available options see the Tampermonkey documentation: https://tampermonkey.net/documentation.php



回答3:

JavaScript does not have access to the computer's file system.

There is no native JS functionality for this. Otherwise any site would be able to save anything to your PC, which would result in your PC getting messed up in no time.



回答4:

You won't be able to do this in the way that you would like. If browsers allowed websites to save whatever content they wanted directly to the user's computer... well you can imagine the consequences.



回答5:

Plugin is the right answer for this. If you are looking for a framework checkout Firebreath it gives you cross platform capability as well as works on all possible browser you can ever think of, including IE. Its easy to learn too



回答6:

You can do this easily in Firefox by selecting an option to Save this automatically from now onwards instead of prompting. I guess this option should be available in Chrome too.

First time when you download a file of new extension say Zip or jpg, the browser may prompt you the location where to save this file. In this case, you can set the location to a default location wherever you want to download the files and set the checkbox to Automatically Download such files.