【报错笔记】在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录。

在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录。
我使用UUID生成8级目录,在webapp下创建目录,将图片传进去。目录始终无法创建的原因是项目默认在图片上传成功后,上传到了发布路径下,({workspace}.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\project_upload)而不是开发路径中。
在这里插入图片描述
在这里插入图片描述
解决方案:更改Tomcat服务器,使其目录生成到开发路径,重新发布项目,执行后,即可生成目录。
在这里插入图片描述
在这里插入图片描述
本来以为出来目录就好了,结果做测试时当上传图片时第一次会创建一个目录(如上图),再之后不管怎么上传图片都不会创建目录,但是controller里的代码是正确的,目录会正确创建,只是不会在webapp下生成目录。
在这里插入图片描述
错误原因:后来我在controller中输出System.getProperty(“user.dir”),发现它的当前工作目录是F:\eclipse,在eclipse中真的发现了之前创建的目录。
在这里插入图片描述
在这里插入图片描述
而我在src/test/java中写的测试代码显示当前工作目录是当前项目的路径
在这里插入图片描述
解决方案:点击项目>右键>Run as > Run Configurations,发现Java Application的工作路径为${workspace_loc:ueas}
在这里插入图片描述
而Tomcat的工作路径为F:eclipse,终于找到了错误之处。
在这里插入图片描述
解决方案:将Tomcat的Arguments改为项目路径即可。
在这里插入图片描述
图片上传之后如果页面不显示图片,只有刷新项目后才显示图片。这是因为图片是上传到tomcat容器那个部署的工程目录下,eclipse会有自己的workspace这个跟工程的部署目录路径是不一样的,你的图片是不会自动上传到eclipse下的,之所以刷新会有,这只不过是eclipse从部署目录下同步过来。所以将项目添加到tomcat的目录下即可。
在这里插入图片描述
但是上述步骤还是会出现问题,在图片上传后必须手动刷新一下页面图片才会显示,所以路径还是有问题,后来我又了利用另外一方法,直接取tomcat的工作路径,就不用配置那些东西来凑tomcat工作路径。
使用String path = req.getSession().getServletContext().getRealPath("/upload");来获取tomcat工作路径。
在这里插入图片描述
这样图片就可以自动上传了而不需要再手动刷新。
这样又出现了新的问题,图片上传后是保存在tomcat的webapp下,当重启tomcat后图片就会被清除,这样就页面在重启后就不会显示图片了;
解决方案:在server.xml中配置存储路径,将其存储位置固定,这样重启tomcat就不会被清除其webapp下的图片。
在这里插入图片描述

以下是一个简单的示例代码,演示如何将编辑页面的文本框和图片保存到 Room 数据库: 1. 定义一个实体类(例如,名为“Note”),用于表示笔记及其相关信息。这个实体类应该包含一个字段用于存储笔记的内容(例如,名为“content”),另一个字段用于存储笔记的图片(例如,名为“image”)。 ``` @Entity(tableName = "notes") data class Note( @PrimaryKey(autoGenerate = true) val id: Int = 0, val content: String = "", val image: ByteArray? = null ) ``` 2. 创建一个 Dao 接口,用于定义插入新笔记的方法。在这个接口,我们可以使用 @Insert 注解来声明一个插入方法,并将 Note 对象作为参数传入。 ``` @Dao interface NoteDao { @Insert fun insert(note: Note) } ``` 3. 在你的编辑页面,当用户点击“保存”按钮,我们需要获取文本框和图片的内容,并将其存储到 Room 数据库。以下是一个简单的示例代码,演示如何实现这个过程: ``` class EditNoteActivity : AppCompatActivity() { private lateinit var binding: ActivityEditNoteBinding private lateinit var db: AppDatabase private lateinit var noteDao: NoteDao override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityEditNoteBinding.inflate(layoutInflater) setContentView(binding.root) db = AppDatabase.getInstance(applicationContext) noteDao = db.noteDao() binding.btnSave.setOnClickListener { saveNote() } } private fun saveNote() { val content = binding.etContent.text.toString() val image = getImageBytes(binding.ivImage) val note = Note(content = content, image = image) noteDao.insert(note) Toast.makeText(this, "Note saved!", Toast.LENGTH_SHORT).show() finish() } private fun getImageBytes(imageView: ImageView): ByteArray? { val drawable = imageView.drawable ?: return null val bitmap = (drawable as BitmapDrawable).bitmap val stream = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream) return stream.toByteArray() } } ``` 在这个示例代码,我们首先获取了文本框和图片的内容。然后,我们创建了一个新的 Note 对象,并将其插入到 Room 数据库。最后,我们显示了一个简单的 Toast 消息,以告诉用户笔记已经成功保存,并结束了编辑页面。 请注意,getImageBytes() 方法是一个辅助方法,用于将 ImageView 的 Bitmap 转换为字节数组。这个方法可以根据你的具体需求进行修改。 希望这个示例代码能够帮助你实现将编辑页面的文本框和图片保存到 Room 数据库
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值