在文档目录中保存图像时出错
Posted
技术标签:
【中文标题】在文档目录中保存图像时出错【英文标题】:Error in saving image in documents directory 【发布时间】:2019-03-12 06:54:27 【问题描述】:我从我的服务器获取一个图像 URL,我想将它保存在文档目录中。 但是在我的以下代码中,我遇到了一个错误。
这是我的文件 URL 路径 - file:///var/mobile/Containers/Data/Application/7AA1BEDE-DA10-4BD6-8115-06C9DCA53BF2/Documents/https://www.cocubes.com/images/getimage.aspx%3Ft=l&id=602
文件 URL.path = /var/mobile/Containers/Data/Application/7AA1BEDE-DA10-4BD6-8115-06C9DCA53BF2/Documents/https://www.cocubes.com/images/getimage.aspx?t=l&id=602
“?”正在转换为 %3F,因此我猜(不确定)我无法前往所需的路径。 这个问题怎么解决??
static func saveImageInDocsDir(image: UIImage,urlString: NSString)
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// choose a name for your image
//let fileName = "image.jpg"
// create the destination file url to save your image
let fileURL = documentsDirectory.appendingPathComponent(urlString as String)
print(fileURL)
print(fileURL.path)
// get your UIImage jpeg data representation and check if the destination file url already exists
if let data = image.jpegData(compressionQuality: 1.0),
!FileManager.default.fileExists(atPath: fileURL.path)
do
// writes the image data to disk
try data.write(to: fileURL)
print("file saved")
catch
print("error saving file:", error)
【问题讨论】:
你检查过finder..中的文件路径吗?图片是否存在 问题在于 urlString 包含/
文件管理器试图将图像的数据保存在不存在的文件夹中。您可以通过将出现的 /
字符替换为 _
来解决此问题。
【参考方案1】:
请在下面添加这一行: 让 filePath = filesDirectory.appendingPathComponent(fileURL)
static func saveImageInDocsDir(image: UIImage,urlString: NSString)
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// choose a name for your image
//let fileName = "image.jpg"
// create the destination file url to save your image
let fileURL = documentsDirectory.appendingPathComponent(urlString as String)
print(fileURL)
print(fileURL.path)
// get your UIImage jpeg data representation and check if the destination file url already exists
let filePath = documentsDirectory.appendingPathComponent(fileURL)
if let data = image.jpegData(compressionQuality: 1.0),
!FileManager.default.fileExists(atPath: filePath.path)
do
// writes the image data to disk
try data.write(to: fileURL)
print("file saved")
catch
print("error saving file:", error)
【讨论】:
【参考方案2】:问题在于 urlString 包含 /
,FileManager 试图将图像的数据保存在不存在的文件夹中。您可以通过将出现的 /
字符替换为 _
来解决此问题。
let fileURL = documentsDirectory.appendingPathComponent((urlString as String).replacingOccurrences(of: "/", with: "_"))
另一种解决方案是先创建一个文件夹。
static func saveImageInDocsDir(image: UIImage, urlString: NSString)
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// choose a name for your image
//let fileName = "image.jpg"
// create the destination file url to save your image
let fileURL = documentsDirectory.appendingPathComponent(urlString as String)
print(fileURL)
print(fileURL.path)
// get your UIImage jpeg data representation and check if the destination file url already exists
if let data = image.jpegData(compressionQuality: 1.0),
!FileManager.default.fileExists(atPath: fileURL.path)
do
// First create a directory
try FileManager.default.createDirectory(at: fileURL.deletingLastPathComponent(), withIntermediateDirectories: true, attributes: nil)
// writes the image data to disk
try data.write(to: fileURL)
print("file saved")
catch
print("error saving file:", error)
【讨论】:
以上是关于在文档目录中保存图像时出错的主要内容,如果未能解决你的问题,请参考以下文章
路径名太长,尝试在 Python 中使用 OpenCV 或 PIL.Image 保存图像时出错