สอบถามเรื่องการ zip ไฟล์

พูดคุยแลกเปลี่ยน ปัญหา การเขียน JavaScript เครื่องมือ AJAX Web 2.0 AJAX Framework jQuery และ Node.JS รวมถึง Framework Express ของ Node.JS ทำงานฝั่ง Server

Moderator: mindphp

ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามค่ะ คือต้องการดาวน์โหลดไฟล์ โดยการทำงานเราจะมีการแปลงไฟล์ PDF เป็นภาพ โดยถ้าเป็น PDF หลายหน้า ไฟล์ภาพจะได้หลายไฟล์
เลยอยากสอบถามโค้ดวิธีการ zip ไฟล์ภาพทั้งหมดที่ได้เพื่อให้ได้ไฟล์ zip ก่อนที่ผู้ใช้จะทำการดาวน์โหลด
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามเรื่องการ zip ไฟล์
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามเรื่องการ zip ไฟล์ เนื่องจากมีการ แปลงไฟล์ PDF เป็นไฟล์ภาพ โดยถ้าเป็น PDF หลายหน้า จะได้ไฟล์ภาพหลายไฟล์ตามจำนวนหน้าของ PDF นั้นๆ จึงอยากทราบวิธีการ zip ไฟล์ เพื่อจะนำไฟล์ที่ zip ได้นั้นส่งไปเพื่อให้ผู้ใช้งานทำการดาวน์โหลด
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25810
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

การทำงานที่ว่าแปลงไฟล์ PDF เป็นภาพทำที่ไหนคะ js หรอคะ
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

เป็นการแปลงไฟล์ PDF เป็นภาพในส่วนของ python ค่ะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25810
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

แนะนำให้ zip มาตั้งแต่ python เลยค่ะ และค่อยส่ง base64 ของไฟล์ zip มาที่ js ค่ะ

การเขียน Code ให้ zip ไฟล์ด้วยภาษา Python
https://www.mindphp.com/developer/tips- ... ython.html

หรือค้นหาเพิ่มเติมได้จาก site:mindphp.com zip ไฟล์
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากที่ทำลองทำตามความเข้าใจนะคะ ใช้โค้ดนี้ในการ zip บางโฟร์เดอร์

โค้ด: เลือกทั้งหมด

myzip = zipfile.ZipFile('PDFtoPIC.zip','w')
    
    myzip.write(directory)
    
    myzip.close()
จะสามารถ zip โฟร์เดอร์ที่มีการเก็บภาพที่แปลงจริง แต่ไม่มีไฟล์ด้านใน ควรปรับหรือใช้ตัวแปรไหนแทนในมา zip

เพิ่มเติมคือในส่วนโค้ดของการแปลงไฟล์ PDF มาเป็นภาพ

โค้ด: เลือกทั้งหมด

dt = datetime.now()
    ts = str(datetime.timestamp(dt))
    directory = "pdf_to_image" + ts
    parent_dir = PARTH
    path = os.path.join(parent_dir, directory)
    os.mkdir(path)
    attach_fname = name_pdf
    attach_fname_jpj = attach_fname.replace(".pdf", ".jpg")
    jpeg_report_path = os.path.join(path, attach_fname_jpj)
    fname_new = ' "' + jpeg_report_path + '"'
    pdf_report_path = os.path.join(path, attach_fname)
    with open(pdf_report_path, 'wb') as theFile:
         theFile.write(base64.b64decode(request.pdf_base64))

    process = subprocess.Popen(r'Magick convert ' + pdf_report_path + fname_new,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = process.communicate()

    file_len = len([name for name in os.listdir(path) if
                    os.path.isfile(os.path.join(path, name))])
    
    image_base_64 = []
    for no in range(file_len -1):
        if file_len > 2:
            new = "-%s.jpg" % no
        else:
            new = ".jpg"
        name_jpg = attach_fname.replace(".pdf", new)
        jpeg_report_path = os.path.join(path, name_jpg)
        with open(jpeg_report_path, "rb") as image_file:
            image_base_64.append({'base64_Img': base64.b64encode(image_file.read()),})
        #os.unlink(jpeg_report_path)
    #os.unlink(pdf_report_path)
    #os.rmdir(path)
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25810
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

ตามเดิมสามารถใช้งานได้ปกตินะคะ

โค้ด: เลือกทั้งหมด

import os
import zipfile as z


for root, dirs, files in os.walk(r'/home/com015/PycharmProjects/pythonProject3/venv/image'):
    zipf = z.ZipFile('Python3.zip', 'w')
    for file in files:
        zipf.write(os.path.join(root, file) , r'/imagezip/'+file)  # os.path.join(root, file) เข้าไปเอาข้อมูลที่จะ zip  , r'/imagezip/'+file โฟล์เดอร์ที่จะเก็บรูปภาพใน zip
    zipf.close()
ไฟล์ทั้งหมดที่ต้องการ zip
JavaScript & Jquery Ajax & Node.JS-1.png
JavaScript & Jquery Ajax & Node.JS-1.png (4.33 KiB) Viewed 1053 times
โฟล์เดอร์ที่แตก zip มา และไฟล์ zip ที่ได้ออกมา
JavaScript & Jquery Ajax & Node.JS-3.png
JavaScript & Jquery Ajax & Node.JS-3.png (6.32 KiB) Viewed 1053 times
ไฟล์ทั้งหมดในโฟล์เดอร์ที่แตก zip มา
JavaScript & Jquery Ajax & Node.JS-4.png
JavaScript & Jquery Ajax & Node.JS-4.png (17.16 KiB) Viewed 1053 times
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

จากที่ทดลองใช้งาน สามารถทำได้แล้วค่ะ สามารถ zip ทั้งตัวโฟร์เดอร์และไฟล์ ด้านในได้แล้วค่ะ

โค้ด: เลือกทั้งหมด

for root, dirs, files in os.walk(directory):
        zipf = z.ZipFile('PDFtoPIC.zip', 'w')
        for file in files:
            zipf.write(os.path.join(root, file) , r'/PDFtoPIC/'+file)  # os.path.join(root, file) เข้าไปเอาข้อมูลที่จะ zip  , r'/imagezip/'+file โฟล์เดอร์ที่จะเก็บรูปภาพใน zip
        zipf.close()
ผลลัพธ์
ไฟล์ zip
ไฟล์ zip.png
ไฟล์ zip.png (3.22 KiB) Viewed 1049 times
แตกไฟล์
แตกไฟล์.png
แตกไฟล์.png (30.5 KiB) Viewed 1049 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามเรื่องการ zip ไฟล์

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามเพิ่มเติมค่ะ ถ้าเราต้องการลบไฟล์หลังถูก zip ต้องทำยังไงหรอคะ คือตอนนนี้ การทำงานที่ได้ คือเมื่อทำการ zip ไฟล์แล้วแปลงเป็น base64 แล้ว โดยที่ปิดการทำงานส่วนการลบไฟล์ไว้ สามารถ ส่งค่า base64 ของไฟล์ zip และสามารถดาวน์โหลดไฟล์ได้ปกติ แต่พอเปิดการทำงานในส่วนของการ ลบไฟล์ จะไม่สามารถทำการดาวน์โหลดไฟล์ได้
เออเร่อในส่วนของ console
from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
โค้ดที่ใช้

โค้ด: เลือกทั้งหมด

@app.post('/api_pdftopic')
async def read_pdf(request: PDFtoPic, requests: Request):

    username = request.username
    type_manage = 'แปลง PDF เป็นภาพ'
    name_pdf = request.name_pdf
    type_file_pdf = request.type_file_pdf
    date = dateday
    ip = requests.client.host
    
    connection = p2.connect( host = db_host, database = db_name, user = db_user, password = db_pass, port = db_port )
    cur = connection.cursor()
    sql = "insert into  datauser(username,type_manage,name_pdf,type_file_pdf,date,ip) values ('%s','%s','%s','%s','%s','%s')" %(username,type_manage,name_pdf,type_file_pdf,date,ip)
    cur.execute(sql)
    connection.commit()
    
    dt = datetime.now()
    ts = str(datetime.timestamp(dt))
    directory = "pdf_to_image" + ts
    parent_dir = PARTH
    path = os.path.join(parent_dir, directory)
    os.mkdir(path)
    attach_fname = name_pdf
    attach_fname_jpj = attach_fname.replace(".pdf", ".jpg")
    jpeg_report_path = os.path.join(path, attach_fname_jpj)
    fname_new = ' "' + jpeg_report_path + '"'
    pdf_report_path = os.path.join(path, attach_fname)
    with open(pdf_report_path, 'wb') as theFile:
         theFile.write(base64.b64decode(request.pdf_base64))

    process = subprocess.Popen(r'Magick convert ' + pdf_report_path + fname_new,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = process.communicate()

    file_len = len([name for name in os.listdir(path) if
                    os.path.isfile(os.path.join(path, name))])
    
    image_base_64 = []
    for no in range(file_len -1):
        if file_len > 2:
            new = "-%s.jpg" % no
        else:
            new = ".jpg"
        name_jpg = attach_fname.replace(".pdf", new)
        jpeg_report_path = os.path.join(path, name_jpg)
        with open(jpeg_report_path, "rb") as image_file:
            image_base_64.append({'base64_Img': base64.b64encode(image_file.read()),})

#ส่วนของการ zip ไฟล์            
    for root, dirs, files in os.walk(directory):
        zipf = z.ZipFile('PDFtoPIC.zip', 'w')
        for file in files:
            zipf.write(os.path.join(root, file) , r'/PDFtoPIC/'+file)  # os.path.join(root, file) เข้าไปเอาข้อมูลที่จะ zip  , r'/imagezip/'+file โฟล์เดอร์ที่จะเก็บรูปภาพใน zip
        zipf.close()

#แปลงไฟล์zipเป็น base64        
    with open(PARTHZIP+zip, "rb") as zip_file:
        encoded_string = base64.b64encode(zip_file.read())
        
        #print(encoded_string)
            
        os.unlink(jpeg_report_path)
    os.unlink(pdf_report_path)
    os.rmdir(path)
    return encoded_string
you're the only one treasure💎
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 40