ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

Re: ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

โดย jirawoot » 27/01/2020 7:04 pm

benzas00123 เขียน: 27/01/2020 4:44 pm
jirawoot เขียน: 27/01/2020 4:23 pm
benzas00123 เขียน: 25/01/2020 8:44 pm C++ & java & Python-1.png
โดยตัว code ของผมจะเช็คว่าใน folder นั้นมีไฟล์ทั้งหมดกี่ตัว ถ้ามีไฟล์เดียวจะอัพโหลดไฟล์เดียวแต่ถ้ามีหลายไฟล์ จะzip ทั้งหมดก่อนค่อยอัพโหลด
ตัวที่เป็นไฟล์เดียว อัพโหลดแล้ว ลองโหลดเปิดได้ปรกติครับ แต่ที่เป็น file zip ไม่สามารถเปิดได้ครับ โดยผมลองไปเปิดตัว ไฟล์ zip ใน folder ที่ฟังก์ชั่นได้สร้างแล้วเปิดได้ปรกติ แต่พอ send_file ออกมาแล้วมันเปิดไม่ได้


แต่ตัว file zip ที่ฟังก์ชั่นสร้างขึ้นมาเปิดได้ปรกติ

code

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

@app.route('/downloadFile', methods=['POST','GET'])
def downloadFile ():
    list = os.listdir(parth)
    numm =len(list)
    if numm == 1:
        for i in os.listdir ( parth ):
            return send_file(parth+i, as_attachment=True)
    else:


        zipf = z.ZipFile ( 'zip/Python.zip', 'w' )
        for root, dirs, files in os.walk ( parth ):
            for file in files:
                zipf.write ( os.path.join ( root, file ) )

            return send_file("zip/Python.zip" ,as_attachment=True)



    return
อันนี้หน้า html ที่ลอง download file ครับ

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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="../static/css/bootstrap.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="../static/js/bootstrap.js"></script>
</head>

<body>
<div class="rowcol-sm-3 col-sm-offset-4">
<form id="upload-form" action="{{url_for('downloadFile')}}" method="POST" enctype="multipart/form-data">
  <div>
    <input type="submit" class="btn btn-primary btn-lg" value="download">
  </div>
</form>
</div>
</body>
ลอง return send_file('zip/Python.zip', attachment_filename='zip/Python.zip') แบบนี้ดู
ลองแล้วครับเหมือนเดิมเลย
ตอน zipf.write ( os.path.join ( root, file ) ) เสร็จแล้วให้ปิดแล้วด้วยโดยใช้คำสั่ง

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

zipf.close()
ก่อนที่จะ return

Re: ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

โดย benzas00123 » 27/01/2020 4:44 pm

jirawoot เขียน: 27/01/2020 4:23 pm
benzas00123 เขียน: 25/01/2020 8:44 pm C++ &amp; java &amp; Python-1.png
โดยตัว code ของผมจะเช็คว่าใน folder นั้นมีไฟล์ทั้งหมดกี่ตัว ถ้ามีไฟล์เดียวจะอัพโหลดไฟล์เดียวแต่ถ้ามีหลายไฟล์ จะzip ทั้งหมดก่อนค่อยอัพโหลด
ตัวที่เป็นไฟล์เดียว อัพโหลดแล้ว ลองโหลดเปิดได้ปรกติครับ แต่ที่เป็น file zip ไม่สามารถเปิดได้ครับ โดยผมลองไปเปิดตัว ไฟล์ zip ใน folder ที่ฟังก์ชั่นได้สร้างแล้วเปิดได้ปรกติ แต่พอ send_file ออกมาแล้วมันเปิดไม่ได้


แต่ตัว file zip ที่ฟังก์ชั่นสร้างขึ้นมาเปิดได้ปรกติ

code

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

@app.route('/downloadFile', methods=['POST','GET'])
def downloadFile ():
    list = os.listdir(parth)
    numm =len(list)
    if numm == 1:
        for i in os.listdir ( parth ):
            return send_file(parth+i, as_attachment=True)
    else:


        zipf = z.ZipFile ( 'zip/Python.zip', 'w' )
        for root, dirs, files in os.walk ( parth ):
            for file in files:
                zipf.write ( os.path.join ( root, file ) )

            return send_file("zip/Python.zip" ,as_attachment=True)



    return
อันนี้หน้า html ที่ลอง download file ครับ

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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="../static/css/bootstrap.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="../static/js/bootstrap.js"></script>
</head>

<body>
<div class="rowcol-sm-3 col-sm-offset-4">
<form id="upload-form" action="{{url_for('downloadFile')}}" method="POST" enctype="multipart/form-data">
  <div>
    <input type="submit" class="btn btn-primary btn-lg" value="download">
  </div>
</form>
</div>
</body>
ลอง return send_file('zip/Python.zip', attachment_filename='zip/Python.zip') แบบนี้ดู
ลองแล้วครับเหมือนเดิมเลย

Re: ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

โดย jirawoot » 27/01/2020 4:23 pm

benzas00123 เขียน: 25/01/2020 8:44 pm C++ &amp; java &amp; Python-1.png
โดยตัว code ของผมจะเช็คว่าใน folder นั้นมีไฟล์ทั้งหมดกี่ตัว ถ้ามีไฟล์เดียวจะอัพโหลดไฟล์เดียวแต่ถ้ามีหลายไฟล์ จะzip ทั้งหมดก่อนค่อยอัพโหลด
ตัวที่เป็นไฟล์เดียว อัพโหลดแล้ว ลองโหลดเปิดได้ปรกติครับ แต่ที่เป็น file zip ไม่สามารถเปิดได้ครับ โดยผมลองไปเปิดตัว ไฟล์ zip ใน folder ที่ฟังก์ชั่นได้สร้างแล้วเปิดได้ปรกติ แต่พอ send_file ออกมาแล้วมันเปิดไม่ได้


แต่ตัว file zip ที่ฟังก์ชั่นสร้างขึ้นมาเปิดได้ปรกติ

code

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

@app.route('/downloadFile', methods=['POST','GET'])
def downloadFile ():
    list = os.listdir(parth)
    numm =len(list)
    if numm == 1:
        for i in os.listdir ( parth ):
            return send_file(parth+i, as_attachment=True)
    else:


        zipf = z.ZipFile ( 'zip/Python.zip', 'w' )
        for root, dirs, files in os.walk ( parth ):
            for file in files:
                zipf.write ( os.path.join ( root, file ) )

            return send_file("zip/Python.zip" ,as_attachment=True)



    return
อันนี้หน้า html ที่ลอง download file ครับ

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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="../static/css/bootstrap.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="../static/js/bootstrap.js"></script>
</head>

<body>
<div class="rowcol-sm-3 col-sm-offset-4">
<form id="upload-form" action="{{url_for('downloadFile')}}" method="POST" enctype="multipart/form-data">
  <div>
    <input type="submit" class="btn btn-primary btn-lg" value="download">
  </div>
</form>
</div>
</body>
ลอง return send_file('zip/Python.zip', attachment_filename='zip/Python.zip') แบบนี้ดู

Re: ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

โดย benzas00123 » 27/01/2020 4:21 pm

mindphp เขียน: 27/01/2020 3:05 pm อัพโหลด หรือ ดาวน์โหลด งง
ถ้าทำฟอร์ม อัพโหลด จะขึ้นอยู่กับ ผู้ใช้งาน ว่าจะเลือกอัพโหลด อะไรเข้ามา
ดาวน์โหลดครับ ปัญหาคือ พอดาวน์โหลดไฟล์ zip ลงมาแล้วมันเปิดไม่ได้ครับ

Re: ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

โดย mindphp » 27/01/2020 3:05 pm

อัพโหลด หรือ ดาวน์โหลด งง
ถ้าทำฟอร์ม อัพโหลด จะขึ้นอยู่กับ ผู้ใช้งาน ว่าจะเลือกอัพโหลด อะไรเข้ามา

ขอสอบถามเกี่ยวกับ การ send_file zip ครับ

โดย benzas00123 » 25/01/2020 8:44 pm

C++ & java & Python-1.png
C++ & java & Python-1.png (41.33 KiB) Viewed 912 times
โดยตัว code ของผมจะเช็คว่าใน folder นั้นมีไฟล์ทั้งหมดกี่ตัว ถ้ามีไฟล์เดียวจะอัพโหลดไฟล์เดียวแต่ถ้ามีหลายไฟล์ จะzip ทั้งหมดก่อนค่อยอัพโหลด
ตัวที่เป็นไฟล์เดียว อัพโหลดแล้ว ลองโหลดเปิดได้ปรกติครับ แต่ที่เป็น file zip ไม่สามารถเปิดได้ครับ โดยผมลองไปเปิดตัว ไฟล์ zip ใน folder ที่ฟังก์ชั่นได้สร้างแล้วเปิดได้ปรกติ แต่พอ send_file ออกมาแล้วมันเปิดไม่ได้


แต่ตัว file zip ที่ฟังก์ชั่นสร้างขึ้นมาเปิดได้ปรกติ

code

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

@app.route('/downloadFile', methods=['POST','GET'])
def downloadFile ():
    list = os.listdir(parth)
    numm =len(list)
    if numm == 1:
        for i in os.listdir ( parth ):
            return send_file(parth+i, as_attachment=True)
    else:


        zipf = z.ZipFile ( 'zip/Python.zip', 'w' )
        for root, dirs, files in os.walk ( parth ):
            for file in files:
                zipf.write ( os.path.join ( root, file ) )

            return send_file("zip/Python.zip" ,as_attachment=True)



    return
อันนี้หน้า html ที่ลอง download file ครับ

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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="../static/css/bootstrap.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="../static/js/bootstrap.js"></script>
</head>

<body>
<div class="rowcol-sm-3 col-sm-offset-4">
<form id="upload-form" action="{{url_for('downloadFile')}}" method="POST" enctype="multipart/form-data">
  <div>
    <input type="submit" class="btn btn-primary btn-lg" value="download">
  </div>
</form>
</div>
</body>

ข้างบน