2016-10-07 18 views
7

Tôi có ứng dụng Máy tính để bàn Node Webkit và cần tải xuống tệp từ máy chủ và lưu cục bộ khi người dùng ngoại tuyến. Tôi có thể tải xuống và lưu tệp khi tôi biết tên tệp là gì, nhưng làm cách nào để đọc nội dung của thư mục trên máy chủ để tôi có thể tải xuống từng tệp?Node.js - đọc và tải xuống tất cả các tệp trong thư mục từ máy chủ và lưu cục bộ

function cacheFiles(filelink, filepath, cb) { 
    var path_array = filelink.split("/"); 
    var foldername = path_array[path_array.length - 2] 

//create new folder for locally html files 
var newdir = filepath + '/' + foldername; 
if (fs.existsSync(newdir)){ 
    alert('file already exists, cannot cache this file.'); 
} else { 
    fs.mkdirSync(newdir); 
} 
//download and save index.html - THIS WORKS 
var indexfile = fs.createWriteStream(newdir+'/index.html'); 
var request = http.get(filelink, function(response) { 
    response.pipe(indexfile); 
    indexfile.on('finish', function() { 
     indexfile.close(cb); 
    }); 
}); 
//read contents of data folder - THIS DOESN'T WORK 
var datafolder = filelink.replace('index.html',''); 

fs.readdir(datafolder, function (err, datafiles) { 
    if (!err) { 
     console.log(datafiles); 
    }else{ 
     console.log(err) ; 
    } 
}); 

}

Các lỗi tôi nhận được trong giao diện điều khiển của tôi là:

"ENOENT: không có tập tin hoặc thư mục như vậy, scandir 'C: \ Users \ my.name \ desktopApp \ ứng dụng \ http: \ www.mysite.co.uk \ wp-content \ tải lên \ wifi_corp2 \ data '"

Ở trên là tìm kiếm tệp cục bộ chứ không phải ở liên kết trực tuyến tôi đã cung cấp trong filelink ví dụ: http://www.mysite.co.uk/wp-content/uploads/wifi_corp2/data

+0

Thư mục bạn đang tìm cách tải xuống ở đâu? –

+0

trên máy chủ của tôi, ví dụ: http: \ www.mysite.co.uk \ wp-content \ uploads \ wifi_corp2-1475754605 \ data – LeeTee

+0

Bạn có thể truy cập danh sách tệp, danh sách tệp để tải xuống không? –

Trả lời

0

OK, Im nghĩ cách tốt nhất là sử dụng Ajax để gọi hàm PHP trên máy chủ để đọc nội dung của tệp.

+0

Có điều này về cơ bản là giống như sử dụng một cuộc gọi AJAX đến một điểm cuối nodejs đọc hệ thống tập tin và trả về kết quả. Với câu hỏi đề cập đến Node, đó là ngôn ngữ tôi đã sử dụng. – cchamberlain

1

Mã sau không đọc hệ thống tệp từ xa, mã này được sử dụng để đọc tệp trên ổ cứng cục bộ của bạn.

import fs from 'fs' 
import path from 'path' 

fs.readdir(path.resolve(__dirname, '..', 'public'), 'utf8', (err, files) => { 
    files.forEach((file) => console.info(file)) 
}) 

Sẽ in tất cả tên tệp từ một thư mục lên và trong thư mục 'công khai' từ vị trí tập lệnh. Bạn có thể sử dụng fs.readFile để đọc nội dung của từng tệp. Nếu chúng là JSON, bạn có thể đọc chúng dưới dạng chuỗi utf8 và phân tích cú pháp chúng bằng JSON.parse.

Để đọc các tập tin từ một máy chủ từ xa, họ phải được phân phát qua rõ ràng hoặc một số máy chủ tập tin tĩnh khác:

import express from 'express' 
const app = express() 
app.use(express.static('public')) 
app.listen(8000) 

Sau đó, vào cuối khách hàng mà bạn có thể sử dụng lấy hoặc yêu cầu http thư viện để gọi endpoint nhanh được lưu trữ tại cổng 8000 (trong ví dụ đơn giản này)

+0

Xin chào, cảm ơn sự giúp đỡ của bạn. Bất kỳ cơ hội nào bạn có thể giải thích về cách thực hiện điều này một cách chính xác? Tôi vừa cài đặt Express trong ứng dụng webkit của nút hiện có và thêm 4 dòng mã bạn đã hiển thị ở trên.Bây giờ tôi nhận được một lỗi, "nhập khẩu mã thông báo bất ngờ" Bạn có thể hỗ trợ thêm như tôi hoàn toàn bị mất. cảm ơn nhiều – LeeTee

+0

Tôi đã sửa đổi, "nhập nhanh từ 'express'" thành "const express = require (" express ");" nhưng giờ thì sao? Làm cách nào để đọc các tệp trong thư mục? Cảm ơn – LeeTee

+0

Đây là cú pháp es6. Nó có thể được transpiled với babel. – cchamberlain

1

Bạn đang trộn mã máy chủ với mã ứng dụng dành cho máy tính để bàn. trên Wordpress.

+0

Không chắc chắn những gì bạn có nghĩa là bằng cách sao lưu hoặc plugin trên wordpress. Để làm những gì chính xác? – LeeTee

Các vấn đề liên quan