如何将我服务器中的文件下载到访问nodeJS服务器中页面的计算机?
我正在使用ExpressJS而且我一直在尝试这个:
app.get('/download', function(req, res){
var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');
res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});
Run Code Online (Sandbox Code Playgroud)
但我无法获取文件名和文件类型(或扩展名).任何人都可以帮助我吗?
我正在构建一个需要将用户上传的图片直接发布到Instagram上的php应用程序,但经过快速搜索后我发现API中没有这样的功能:(感觉很奇怪...因为它们应该提供一个.我我不确定是否有任何其他方式(除了Android和iOS的应用程序)使用php上传图片.如果有任何可能性,请给我任何想法.
我也读过这个,
谢谢
我从http函数下载了一个简单的下载(为简化省略了错误处理):
function download(url, tempFilepath, filepath, callback) {
var tempFile = fs.createWriteStream(tempFilepath);
http.request(url, function(res) {
res.on('data', function(chunk) {
tempFile.write(chunk);
}).on('end', function() {
tempFile.end();
fs.renameSync(tempFile.path, filepath);
return callback(filepath);
})
});
}
Run Code Online (Sandbox Code Playgroud)
但是,由于我download()异步调用了几十次,它很少报告fs.renameSync抱怨它无法找到文件的错误tempFile.path.
Error: ENOENT, no such file or directory 'xxx'
Run Code Online (Sandbox Code Playgroud)
我使用相同的网址列表来测试它,它失败了大约30%的时间.逐个下载时,网址列表相同.
测试了一些,我发现了以下代码
fs.createWriteStream('anypath');
console.log(fs.exist('anypath'));
console.log(fs.exist('anypath'));
console.log(fs.exist('anypath'));
Run Code Online (Sandbox Code Playgroud)
并不总是打印true,但有时打印第一个答案false.
我怀疑太多异步fs.createWriteStream调用无法保证文件创建.这是真的?有没有什么方法可以保证文件的创建?
是否有可能wget从node.js应用程序中运行?我想要一个脚本来抓取一个站点,并下载一个特定的文件,但是该文件href的链接经常发生变化.所以,我认为最简单的方法是找到href链接,然后只需对它执行一个wget即可.
谢谢!
我在 node.js 中找到了两种不同的管道流方法
.pipe()流的众所周知的方法
https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
和流的独立功能
https://nodejs.org/api/stream.html#stream_stream_pipeline_streams_callback
我应该使用哪一个,这两者之间有什么好处?
我正在开发一个应用程序,在第一次运行时必须通过API从网上下载文件(图像jpg/png),然后将其存储在本地,这样就不再需要在线连接(用户可以在线时运行更新)如果有可用的更新,请通过api下载更新的数据.
我知道桌面应用程序的工作方式非常罕见,但主要目标是将桌面应用程序数据与Web应用程序同步.
到目前为止,我已经找到了一个npm插件request(链接)来检查用户是否连接到互联网.
我不确定是否可以在电子应用程序中下载和存储文件(因此它在应用程序外部是不可见的)?你能推荐必要的插件/工具来实现这个目标吗?
任何帮助将不胜感激.
我正在尝试使用node.js 使用Google SDK API从Google驱动器下载文件.
但我无法在服务器端写入/保存文件 - node.js
码:-
var GoogleTokenProvider = require("refresh-token").GoogleTokenProvider,
async = require('async'),
fs = require("fs"),
request = require('request'),
_accessToken;
var _XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var https = require('https');
const CLIENT_ID = "";
const CLIENT_SECRET = "";
const REFRESH_TOKEN = '';
const ENDPOINT_OF_GDRIVE = 'https://www.googleapis.com/drive/v2';
async.waterfall([
//-----------------------------
// Obtain a new access token
//-----------------------------
function(callback) {
var tokenProvider = new GoogleTokenProvider({
'refresh_token': REFRESH_TOKEN,
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET
});
tokenProvider.getToken(callback);
},
//--------------------------------------------
// Retrieve the children …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 node-fetch 下载带有 typescript (Node.js) 的文件。
根据此处的文档和堆栈溢出答案,以下代码应该有效:
public async downloadXMLFeed(): Promise<void>{
// function for download the file to
// a temporary location
let fileStream = fs.createWriteStream(FILE_PATH, {encoding: "utf-8"});
fetch(FILE_URL)
.then((response) => {
response.body.pipe(fileStream)
fileStream.on("finish", () => {
fileStream.close();
})
});
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Property 'pipe' does not exist on type 'Response'
Run Code Online (Sandbox Code Playgroud)
我还检查了类型文件以获取节点获取类型的响应。它没有管道功能。
我在这里检查了节点获取的类型定义,根据此处的接口,响应的主体似乎是一个可读的流:
export class Body {
constructor(body?: any, opts?: { size?: number; timeout?: number });
arrayBuffer(): Promise<ArrayBuffer>;
blob(): Promise<Buffer>;
body: NodeJS.ReadableStream; // This should work.
bodyUsed: boolean;
buffer(): …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试从URL 导入我的一个脚本,但require在这种情况下该功能似乎不起作用.
var functionChecker = require("http://javascript-modules.googlecode.com/svn/functionChecker.js");
这是此脚本生成的错误消息的摘录:
Error: Cannot find module 'http://javascript-modules.googlecode.com/svn/functionChecker.js'
有没有办法从node.js中的URL导入脚本?
我正在使用node-html-pdf模块从ejs我创建的模板生成PDF文件,该模板在生成后会保存在我的服务器上。
现在这可以正常工作,但是我真正需要的是单击按钮时,它会生成PDF并下载文件,而不是保存文件。
在下面,您可以看到我生成和保存文件的代码:
var html = null;
ejs.renderFile('./templates/participants.ejs', {users: req.body.users, course: req.body.course, organization: req.body.organization}, function (err, result) {
if (result) {
html = result;
}
else {
res.end('An error occurred');
console.log(err);
}
});
pdf.create(html).toStream(function(err, stream){
var file = 'c:' + stream.path;
// var file = full path to tmp file (added 'c:' because I'm testing locally right now)
res.setHeader('Content-type', 'application/pdf');
res.setHeader('Content-disposition', 'attachment; filename=' + file);
res.download(file, req.body.course.name + '.pdf', function(err){
if (err) {
// Handle error, …Run Code Online (Sandbox Code Playgroud) 如何从URL下载音频文件并将其存储在本地目录中?我正在使用 Node.js,并尝试了以下代码:
var http = require('http');
var fs = require('fs');
var dest = 'C./test'
var url= 'http://static1.grsites.com/archive/sounds/comic/comic002.wav'
function download(url, dest, callback) {
var file = fs.createWriteStream(dest);
var request = http.get(url, function (response) {
response.pipe(file);
file.on('finish', function () {
file.close(callback); // close() is async, call callback after close completes.
});
file.on('error', function (err) {
fs.unlink(dest); // Delete the file async. (But we don't check the result)
if (callback)
callback(err.message);
});
});
}
Run Code Online (Sandbox Code Playgroud)
没有发生错误,但未找到该文件。