สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

ตอบกระทู้

รูปแสดงอารมณ์
: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] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย fonfonn » 10/08/2022 3:32 pm

สามารถทำการใส่การจัดการไฟล์ในส่วนของ API ในการแปลงไฟล์ PDF เป็นภาพได้แล้วค่ะ โดย

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

from fastapi import FastAPI, Request
from pydantic import BaseModel
import uvicorn
import base64
import subprocess

app =FastAPI()

class Pdf_base64(BaseModel): #สร้างคลาสเพื่อรับ bastุุุ64 ในรูปแบบ str
       pdf_base64: str
       
@app.post('/api_pdftopic')
async def read_pdf(request: Pdf_base64):
#ในส่วนนี้จะเป็นการแปลงไฟล์จาก base64 ไปเป็น PDF
    with open(r'C:\Users\fonfo\pdf-toolkits\lernpython.pdf', 'wb') as theFile:
        theFile.write(base64.b64decode(request.pdf_base64))
#ในส่วนนี้จะเป็นการแปลงไฟล์จาก PDF ไปเป็น ภาพ
    process = subprocess.Popen(r"Magick convert C:\Users\fonfo\pdf-toolkits\lernpython.pdf C:\Users\fonfo\pdf-toolkits\lernpython.jpg", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = process.communicate()
    return "success"  #เมื่อสำเร็จให้ทำการแสดงข้อความว่า success
       
ผลลัพธ์ที่ได้
จะมีไฟล์ PDF และไฟล์ ภาพตามโค้ดดิ้งที่ได้โค้ดไว้ด้านบนโดยไฟล์ PDFจะมีชื่อว่า lernpython.pdf และไฟล์ภาพที่แปลงมาจะมีชื่อว่า lernpython.jpg
สามารถทดสอบใน postman คือ นำ url http ://127.0.0.1:8000/api_pdftopic ไปทดสอบ และใส่ base64 ที่มีตามภาพด้านล่าง จากนั้นกด send
นำ URL ไปทดสอบใน Postman.png
นำ URL ไปทดสอบใน Postman.png (24.64 KiB) Viewed 1124 times
จะมีข้อความ success แปลว่าไฟล์ได้ทำการถูกสร้างสำเร็จแล้ว
ข้อความ success.png
ข้อความ success.png (9.13 KiB) Viewed 1124 times
เมื่อกลับมาดูที่โฟร์เดอร์จะพบไฟล์ 2 ไฟล์ที่ถูกสร้างขึ้น โดยมีไฟล์ PDF ที่แปลงจาก base64 และไฟล์ ภาพที่แปลงจาก ไฟล์ PDF
เมื่อกลับมาดูที่โฟร์เดอร์จะไฟล์ 2 ไฟล์ที่ถูกสร้างขึ้น.png
เมื่อกลับมาดูที่โฟร์เดอร์จะไฟล์ 2 ไฟล์ที่ถูกสร้างขึ้น.png (3.16 KiB) Viewed 1124 times

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย MBMoo » 09/08/2022 6:51 pm

การแปลง base64 to pdf file ค่ะ
pdf_report_path คือ path ที่ต้องการเอาไฟล์ไปเก็บ + ชื่อไฟล์ค่ะ

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

		import base64
                with open(pdf_report_path, 'wb') as theFile:
                    theFile.write(base64.b64decode(base64))

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย MBMoo » 09/08/2022 6:01 pm

ทำในฟังก์ชั่นเดิมค่ะ ก่อน return

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย fonfonn » 09/08/2022 5:04 pm

สอบถามเพิ่มนะคะ คือที่ต้องการคือ แบบว่าจะให้ API จัดการกับไฟล์ base64 ยังไง โดย

1. แปลงไฟล์ base64 มาบันทึกไฟล์เป็น pdf สามารถใช้โค้ดแบบไหนในส่วนนี้ค่ะ

2. เราจะเรียกใช้งาน ฟังก์ชันในส่วน API ยังไงค่ะ เช่น ถ้าเราได้โค้ดในการแปลงไฟล์ base64 มาบันทึกไฟล์เป็น pdf แล้ว แล้วเราจะเรียกใช้งานโค้ดนั้นในส่วน API ยังไงคะ
ในที่นี้เราจะมีการเรียกใช้งาน 2 อย่างค่ะ คืออยากให้ API เรียกใช้งานฟังก์ชัน แปลงไฟล์ base64 มาบันทึกไฟล์เป็น pdf จากนั้นจะทำการนำ ไฟล์ pdf ที่แปลงมามาแปลงเป็นไฟล์ภาพอีกที ตามโค้ดการแปลงไฟล์

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

import subprocess

process = subprocess.Popen(r"Magick convert C:\Users\USER\Desktop\LOADING.pdf C:\Users\USER\Desktop\a.png", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย fonfonn » 09/08/2022 4:25 pm

wkid เขียน: 09/08/2022 3:50 pm โอเคครับ ก็สามารถนำตัวอย่างที่แปลงมาจะเห็นได้ว่าแปลงเป็นตัวอักษรนะครับ ดังนั้นก็สามารถส่งไปที่ตัว api แล้วทดสอบการแปลงได้เลยครับ เราอยากให้ api มีการจัดการแบบไหนกับตัวของ base64 ก็สามารถทำเพิ่มเติมในส่วนของฟังก์ชั่นได้เลยครับ
สอบถามเพิ่มนะคะ คือที่ต้องการเลยคือ แบบว่าจะให้ API จัดการกับไฟล์ base64 ยังไงค่ะ แล้วก็จะนำไปทดสอบกับ postman ยังไงค่ะ คือถ้าเรามีโค้ดแปลงไฟล์อยู่แล้วจะเรียกใช้งานโค้ดนั้นในส่วน API ยังไงประมาณนี้ค่ะ
คืออธิบายแบบที่ต้องการเลยนะคะ ไม่รู้ว่าหลักการทำงานถูกไหม คือเรามีโค้ดแปลงไฟล์ และต้องการ เรียกใช้งานฟังก์ชันในนั้นส่วน ของ API และนำไปทดสอบกับ postman มันสามารถทำได้ยังไงคะ

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

import subprocess

process = subprocess.Popen(r"Magick convert C:\Users\USER\Desktop\LOADING.pdf C:\Users\USER\Desktop\a.png", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย wkid » 09/08/2022 3:52 pm

ต้องถามว่าจะให้ api จัดกการยังไงกับตัว base64 ที่ได้รับมาครับ

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย wkid » 09/08/2022 3:50 pm

โอเคครับ ก็สามารถนำตัวอย่างที่แปลงมาจะเห็นได้ว่าแปลงเป็นตัวอักษรนะครับ ดังนั้นก็สามารถส่งไปที่ตัว api แล้วทดสอบการแปลงได้เลยครับ เราอยากให้ api มีการจัดการแบบไหนกับตัวของ base64 ก็สามารถทำเพิ่มเติมในส่วนของฟังก์ชั่นได้เลยครับ

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย fonfonn » 09/08/2022 3:41 pm

wkid เขียน: 09/08/2022 3:32 pm ก่อนอื่นลองเขียน API ที่เราจะต้องการทดสอบโดย Postman ครับ
จากตัวอย่าง API ที่แปะมานี่ อันนี้จะมีการรับค่ามาเป็นตัวของตัวอักษรใช่ไหมครับ

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

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

Class Pdf_base64(BaseModel):
   pdf_base64: str

@app.post('/api_pdf')
async def read_pdf(request: Pdf_base64):
   return request.pdf_base64
ขอดูตัวอย่างของ base64 ที่แปลงมาจาก PDF หน่อยครับ
ส่วนของ base64 ที่แปลงมาจาก PDF นะคะ เป็นการแปลงไฟล์ pdf ไปเป็น base64 ตามออนไลน์
lernpython.txt
(189.61 KiB) ดาวน์โหลดแล้ว 86 ครั้ง

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย wkid » 09/08/2022 3:32 pm

ก่อนอื่นลองเขียน API ที่เราจะต้องการทดสอบโดย Postman ครับ
จากตัวอย่าง API ที่แปะมานี่ อันนี้จะมีการรับค่ามาเป็นตัวของตัวอักษรใช่ไหมครับ

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

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

Class Pdf_base64(BaseModel):
   pdf_base64: str

@app.post('/api_pdf')
async def read_pdf(request: Pdf_base64):
   return request.pdf_base64
ขอดูตัวอย่างของ base64 ที่แปลงมาจาก PDF หน่อยครับ

Re: สอบถามการใส่ การจัดการไฟล์ในส่วนของ เว็บเซอร์วิส ในภาษา python

โดย fonfonn » 09/08/2022 2:44 pm

bolue เขียน: 09/08/2022 11:24 am
คำถามที่ 1. เราจะใช้โค้ดนี้เพราะเราจะสามารถรับการรีเควสจาก html + javascript ได้ใช่ไหมคะ
ค่ะ ทาง javascript จะแปลง file pdf เป็น base64 แล้วส่งไป webservice ค่ะ
คำถามที่ 2.เราใส่การจัดการไฟล์ตรงส่วนไหนคะ ตอนนี้ติดตรงนี้ค่ะ แบบว่าไปต่อไม่ถูกว่า เราจะรับไฟล์เข้ามาแล้วแปลงไฟล์ยังไงค่ะ คือถ้าเรามีโค้ดการแปลงไฟล์คือ(เท่าที่มีตอนนี้นะคะ)
หลีงจากได้ base64 มา เราสามารถเอา base64 มาบันทึกไฟล์เป็น pdf ได้ และหลังจากนั้นค่อยทำการแปลงไฟล์ตาม code แปะมาค่ะ


ลองเอาไฟล์ pdf ไปแปลงเป็น base64 ตามออนไลน์ก่อนก็ได้ค่ะ แล้วเอา base64 นั้นมาทดสอบ webservice ใน postman
สอบถามเพิ่มนะคะ
เราทำการรับไฟล์ pdf มา จากนั้น แปลงเป็น base64 เพื่อทำการส่งไป webservice ในส่วนนี้เราละไว้ก่อน มาทำในส่วน webservice ก่อน และจากที่เราได้นำไฟล์ pdf ที่ต้องการไปแปลงเป็น base64 แล้วเราจะเขียน API แบบไหนที่นำไปทดสอบใน postman คะ แบบขอตัวอย่างหรือไกด์เพิ่มเติมทีค่ะ คือไม่รู้ว่าจะนำ base64 มาทดสอบ webservice ใน postman ยังไงค่ะ

ข้างบน